본문 바로가기

Programming/BOJ

[백준/C++] 백준 1946번: 신입 사원

별거 아닌데 문제가 이해안되서 헤맸다. 난독인듯. 서류랑 면접 순위를 나타낸건데 점수를 나타낸 건 줄 알고 계속 고뇌에 빠졌었다. 순위가 서류와 면접 두 가지로 주어지기 때문에 일단 서류/면접 중 하나로 정렬한다. 이후 아래와 같이 제일 높은 서류성적을 가진사람의 면접순위를 최대 면접순위에 저장해놓고 다음사람을 최대 면접순위와 비교하고, 최대값보다 높은 순위를 가지면 그 값으로 최대 면접순위를 업데이트 하는 식으로 풀면 된다.

 

#include <iostream>
#include <algorithm>
using namespace std;


int T, N;
int cnt_array[21];
pair<int,int> score[100000];
int main() {

	cin >> T;

	for (int i = 0; i < T; i++) {
		cin >> N;
		for (int j = 0; j < N; j++) {
			cin >> score[j].first >> score[j].second;
		}

		sort(score, score + N); //first를 기준으로 오름차순으로 정렬


		int max_score = score[0].second;
		int cnt = 0;
		for (int i = 0; i < N; i++) {
			if (score[i].second <= max_score) {
				cnt++;
				max_score = score[i].second;
			}
		}

		cnt_array[i] = cnt;
		
	}

	for (int i = 0; i < T; i++) {
		cout << cnt_array[i]<<endl;
	}


	return 0;
}