본문 바로가기
Algorithm/그리디

[백준] 1946 신입사원 c++

by 젊은오리 2023. 3. 20.
728x90

 

문제 링크 https://www.acmicpc.net/problem/1946

KEY

  • 그리디 유형의 문제의 상당 부분은 정렬을 통해서 풀 수 있는데, 이 문제 역시 벡터의 정렬을 통해 해결할 수 있다.
  • 서류순위, 면접순위 두 가지를 고려해야 하므로 서류순위를 오름차순으로 정렬하여 고정한 후, 면접 순위만을 고려하면 된다.
  • 서류순위를 오름차순 정렬했기 때문에 면접순위를 고려할 때, n번째 신입사원은 1 ~ n-1번째 신입사원의 면접순위보다 높아야 한다. 

 

Code

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
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
#include<cstring>
#include<string>
using namespace std;
int T, N;
int main() {
    cin >> T;
    while (T--) {
        //초기화
        int answer = 0//정답
        vector<pair<intint>> v; //{서류순위, 면접순위}
        priority_queue<intvector<int>, greater<>> pq; // 면접순위의 최소값 식별을 위한 우선순위 큐
 
        cin >> N;
        for (int i = 0; i < N; i++) {
            int first, second;
            cin >> first >> second;
            v.push_back({ first,second });
        }
        sort(v.begin(), v.end()); //서류 순위대로 정렬
 
        for (int i = 0; i < N; i++) {
            pq.push(v[i].second);
            if (v[i].second <= pq.top()) { //신입사원의 면접순위가 여태 나온 면접순위의 최솟값보다 작다면
                answer++;
            }
        }
        cout << answer << endl;
    }
}
cs
728x90

'Algorithm > 그리디' 카테고리의 다른 글

[백준] 1715 카드 정렬하기 c++  (0) 2023.03.21
[백준] 11047 동전0 c++  (0) 2023.03.20
[백준] 2839 설탕 배달 c++  (0) 2023.03.15
[백준] 11000 강의실 배정 c++  (0) 2022.02.02
백준 1343 폴리오미노  (0) 2022.02.01

댓글