𝘚𝘭𝘰𝘸 𝘣𝘢𝘡 𝘴𝘡𝘦𝘒π˜₯𝘺

[λ°±μ€€] 10825번: ꡭ영수 - C++ λ³Έλ¬Έ

μ½”λ”©ν…ŒμŠ€νŠΈ μ€€λΉ„/λ°±μ€€

[λ°±μ€€] 10825번: ꡭ영수 - C++

.23 2021. 8. 11. 01:03
문제

λ„ν˜„μ΄λ„€ 반 학생 Nλͺ…μ˜ 이름과 κ΅­μ–΄, μ˜μ–΄, μˆ˜ν•™ μ μˆ˜κ°€ 주어진닀. μ΄λ•Œ, λ‹€μŒκ³Ό 같은 쑰건으둜 ν•™μƒμ˜ 성적을 μ •λ ¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

  1. κ΅­μ–΄ μ μˆ˜κ°€ κ°μ†Œν•˜λŠ” μˆœμ„œλ‘œ
  2. κ΅­μ–΄ μ μˆ˜κ°€ κ°™μœΌλ©΄ μ˜μ–΄ μ μˆ˜κ°€ μ¦κ°€ν•˜λŠ” μˆœμ„œλ‘œ
  3. κ΅­μ–΄ μ μˆ˜μ™€ μ˜μ–΄ μ μˆ˜κ°€ κ°™μœΌλ©΄ μˆ˜ν•™ μ μˆ˜κ°€ κ°μ†Œν•˜λŠ” μˆœμ„œλ‘œ
  4. λͺ¨λ“  μ μˆ˜κ°€ κ°™μœΌλ©΄ 이름이 사전 순으둜 μ¦κ°€ν•˜λŠ” μˆœμ„œλ‘œ (단, μ•„μŠ€ν‚€ μ½”λ“œμ—μ„œ λŒ€λ¬ΈμžλŠ” μ†Œλ¬Έμžλ³΄λ‹€ μž‘μœΌλ―€λ‘œ μ‚¬μ „μˆœμœΌλ‘œ μ•žμ— μ˜¨λ‹€.)

 

μž…λ ₯

첫째 쀄에 λ„ν˜„μ΄λ„€ 반의 ν•™μƒμ˜ 수 N (1 ≤ N ≤ 100,000)이 주어진닀. λ‘˜μ§Έ 쀄뢀터 ν•œ 쀄에 ν•˜λ‚˜μ”© 각 ν•™μƒμ˜ 이름, κ΅­μ–΄, μ˜μ–΄, μˆ˜ν•™ μ μˆ˜κ°€ 곡백으둜 ꡬ뢄해 주어진닀. μ μˆ˜λŠ” 1보닀 ν¬κ±°λ‚˜ κ°™κ³ , 100보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄λ‹€. 이름은 μ•ŒνŒŒλ²³ λŒ€μ†Œλ¬Έμžλ‘œ 이루어진 λ¬Έμžμ—΄μ΄κ³ , κΈΈμ΄λŠ” 10자리λ₯Ό λ„˜μ§€ μ•ŠλŠ”λ‹€.

 

좜λ ₯

λ¬Έμ œμ— λ‚˜μ™€μžˆλŠ” μ •λ ¬ κΈ°μ€€μœΌλ‘œ μ •λ ¬ν•œ ν›„ μ²«μ§Έ 쀄뢀터 N개의 쀄에 걸쳐 각 ν•™μƒμ˜ 이름을 좜λ ₯ν•œλ‹€.


정렬을 μ΄μš©ν•˜μ—¬ ν’€ 수 μžˆλŠ” 문제.

sort ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜μ—¬ ν’€μ—ˆλŠ”λ°, μ •λ ¬μ˜ 기쀀이 μžˆμœΌλ―€λ‘œ compare ν•¨μˆ˜μ— 기쀀을 μž‘μ„±ν•œλ‹€.

학생 이름과 성적을 μ €μž₯ν•΄λ‘λŠ” ꡬ쑰체 Studentλ₯Ό μ„ μ–Έν•˜μ˜€κ³ , Student ꡬ쑰체 벑터에 μž…λ ₯ν•œ ν•™μƒλ“€μ˜ 정보λ₯Ό μ €μž₯ν•œλ‹€.

 

μ½”λ“œ
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

struct Student {
    string name;
    int kor, eng, mat;
};

bool compare(Student a, const Student b) {
    if(a.kor == b.kor) {
        if(a.eng == b.eng) {
            if(a.mat == b.mat) {
                return a.name < b.name;
            }
            else return a.mat > b.mat;
        }
        else return a.eng < b.eng;
    }
    else return a.kor > b.kor;
}

int main(void) {
    int n;
    scanf("%d", &n);

    vector<Student> list(n);
    for(int i = 0; i < n; i++) {
        cin >> list[i].name >> list[i].kor >> list[i].eng >> list[i].mat;
    }

    sort(list.begin(), list.end(), compare);
    for(int i = 0; i < n; i++) {
        cout << list[i].name << "\n";
    }
    return 0;
}
Comments