언유상씨의 건전한 취미생활

[백준 알고리즘] 신입 사원(1946) C++로 풀기 본문

건전한 취미생활 - 알고리즘

[백준 알고리즘] 신입 사원(1946) C++로 풀기

언유상 2020. 5. 24. 23:58

문제 이름 : 신입 사원 

문제 번호 : 1946

사용 언어 : c++

 

문제는 다음과 같다.

 

 

pair와 vector를 이용해서 성적을 전부 처리한뒤, 1차 성적 우수자 순으로 정렬을 해준다.

그리고 뒤에서부터 역순으로 연산을 진행한다.

이미 뒤에 있다는 이야기는 앞선 사람들 보다 1차 성적이 낮다는 의미가 되므로,

본인보다 앞에 있는 사람보다 2차 성적이 낮다는 의미는 1차 2차 모두 타 지원자 보다 성적이 떨어진다는 것이다.

 

따라서 소스코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <utility>
#include <cmath>
 
using namespace std;
pair<intint> p1;
vector<pair<intint>> v;
 
int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    int t, n, c, ans;
    cin >> t;
    for (int i = 0; i < t; i++) {
        cin >> n;
        ans = n;
        for (int j = 0; j < n; j++) {
            cin >> p1.first >> p1.second;
            v.push_back(p1);
        }
        sort(v.begin(), v.end());
    
        for (int k = n - 1; k > 0; k--) { //1차 성적 우수자 기준
            for (int m = k - 1; m >= 0; m--) { //위에 있는 사람
                if (v[k].second > v[m].second) { // 위의 사람보다 못하면
                    ans--;
                    break;
                }
            }
        }
        cout << ans << "\n";
        v.clear();
    }
    return 0;
}
 
cs

 

코드를 돌려보면

Comments