πŸ•οΈ ICPC Sinchon/Sorting

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

선달 2022. 9. 4. 00:45
λ°˜μ‘ν˜•

문제

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

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

μž…λ ₯

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

좜λ ₯

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

 

풀이

sortλ₯Ό μ΄μš©ν•΄ 정렬을 ν•΄μ£ΌλŠ”λ° μ΄λ•Œ Compare comp λ₯Ό 잘 μ„€μ •ν•΄μ£Όλ©΄ μ‰½κ²Œ 풀이할 수 μžˆλ‹€.

bool cmp(student a, student b) {
    if(a.kor == b.kor) {
        if(a.eng == b.eng) {
            if(a.math == b.math) {
                return a.name < b.name;
            }
            return a.math > b.math;
        }
        return a.eng < b.eng;
    }
    return a.kor > b.kor;
}

말 κ·ΈλŒ€λ‘œ ν‘Όλ‹€λ©΄ μ΄λ ‡κ²Œ κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜κ² μ§€λ§Œ...

보기 λ„ˆλ¬΄ μ•ˆμ’‹λ‹€

 

bool cmp(student a, student b) {
    if(a.kor != b.kor) return a.kor > b.kor;
    if(a.eng != b.eng) return a.eng < b.eng;
    if(a.math != b.math) return a.math > b.math;
    else return a.name < b.name;
}

각 μ μˆ˜κ°€ λ‹€λ₯Έ κ²½μš°μ— 쑰건을 μ²˜λ¦¬ν•΄μ£Όλ„λ‘ λ°”κΎΈλ©΄ μ½”λ“œκ°€ λ”μš± 깔끔해진닀

 

// Authored by : seondal
// Co-authored by : -

// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct student {
    string name;
    int kor, eng, math;
};

bool cmp(student a, student b) {
    if(a.kor != b.kor) return a.kor > b.kor;
    if(a.eng != b.eng) return a.eng < b.eng;
    if(a.math != b.math) return a.math > b.math;
    else return a.name < b.name;
}


int main() {
    int n;
    cin >> n;
    
    vector<student> v(n);
    for(int i=0; i<n; i++) cin >> v[i].name >> v[i].kor >> v[i].eng >> v[i].math;
    
    sort(v.begin(), v.end(), cmp);
    
    for(int i=0; i<n; i++) cout << v[i].name << "\n";
    
    return 0;
}

/*
 */
λ°˜μ‘ν˜•