Algorithm

[백준 1946] 신입 사원

moguogu 2022. 6. 30. 18:56

문제설명

알고리즘

1. 입력 값 저장

2. 서류 점수 기준으로 오름차순 정렬

3. 서류 1등의 면접 점수를 기준으로 다음 사람들의 면접 점수를 조회해 더 높은 값이 나올때 마다 합격, 및 업데이트

코드

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

vector<pair<int, int>> grade;


int main() {
	int T, N;
	cin >> T;

	while (T) {
		cin >> N;
		for (int i = 0; i < N; i++)//점수 입력
		{
			int x, y; 
			cin >> x >> y; 
			grade.push_back({x,y});
		}
				
		sort(grade.begin(), grade.end()); //서류 기준 오름차순 정렬
		int cnt = 1;// 1등은 합격
		int interview = grade[0].second;//1등의 면접 점수
		for (int i = 0; i < grade.size(); i++)//면접 점수확인 
		{
			int y = grade[i].second;//면접 점수
			if (y < interview) {//통과한 사람의 면접 점수보다 더 좋으면 합격
				interview = y;//면접 점수 업데이트 
				cnt++;
			}
		}
		cout << cnt<<'\n'; 
		grade.clear();
		T--;
	}
}

고찰

이 문제는 처음에 읽었을 때 이해가 잘 안되었다

처음에는 인원 수의 절반만 넘은 등수를 가졌으면 합격이 되는 줄 알았는데, 테스트 케이스에서 부터 틀렸다

 

중요한 점은, 남들보다 나은게 있어야지 선발이 된다는 것이었다

따라서 서류 점수를 높은 순으로 정렬하고, 처음 1등을 한 사람은 무조건 합격이다

그리고 그 사람의 면접 점수를 기준으로 이보다 더 나은 사람이 나와야 남들보다 나은게 있다고 판단해 합격을 하는것이다

면접 점수가 더 나은 사람이 나올 때 마다 업데이트를 해서 비교 해준다

이때 서류점수는 정렬이 되어있음으로 써 비교를 할 필요가 없다

왜냐하면 점수를 한 사람씩 조회할 때 마다, 전사람 보다는 서류 점수가 낮은 사람이니 면접이 높아야만 합격이 되는 것이다 

'Algorithm' 카테고리의 다른 글

[프로그래머스] 숫자 문자열과 영단어  (0) 2022.07.01
[프로그래머스] 124 나라의 숫자  (0) 2022.06.30
[백준 1107] 리모컨  (0) 2022.06.30
[백준 1926] 그림  (0) 2022.06.27
[백준 18352] 특정 거리의 도시 찾기  (0) 2022.06.25