www.acmicpc.net/problem/1946

 

1946번: 신입 사원

첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성��

www.acmicpc.net


  • 서류순위와 면접순위가 모두 낮은 사람만 제거하면 된다.
  • 둘 중 한 쪽을 기준으로 정렬한 뒤, 순차적으로 탐색해가면서 다른 순위가 더 높은 사람들만 세어준다.

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int tc;
int n;
int pap, inv;

int main()
{
    cin.tie(0);
    ios_base::sync_with_stdio(0);
    cin >> tc;
    for(int t = 0 ; t < tc ; t++)
    {
        cin >> n;
        vector<pair<int,int>> v;
        for(int i = 0 ; i < n ; i++)        // 서류순위와 면접순위 입력받아서 벡터에 푸시
        {
            cin >> pap >> inv;
            v.push_back({pap, inv});
        }
        sort(v.begin(), v.end());           // 서류순위 높은순으로 정렬

        int answer = 0, cur = 10e6;
        for(int i = 0 ; i < n ; i++)
        {                                   // 서류순위가 높은 순(등수니까 값이 낮은순)으로 검사하기 때문에
            if(v[i].second < cur)           // 면접순위가 더 높은 사람이 나올때만
            {
                answer++;                   // 해당 사람을 뽑고
                cur = v[i].second;          // 해당 사람의 면접순위를 다시 cur 에 저장하여 그 이후 사람들과 비교
            }
        }
        cout << answer << '\n';
    }
}

'PS > BOJ' 카테고리의 다른 글

[백준] 2512 : 예산  (0) 2020.09.24
[백준] 10799 : 쇠막대기  (0) 2020.09.23
[백준] 9934 : 완전 이진 트리  (0) 2020.09.16
[백준] 2468 : 안전 영역  (0) 2020.09.15
[백준] 4963 : 섬의 개수  (0) 2020.09.14

+ Recent posts