문제풀이/Greedy
[Python/파이썬] 백준 1946번 신입 사원
딜레이레이
2025. 3. 13. 18:07
https://www.acmicpc.net/problem/1946
코드
from heapq import heappop, heappush
import sys
input = sys.stdin.readline
for _ in range(int(input())):
n = int(input())
applicants = []
for _ in range(n):
doc, interview = map(int, input().split())
heappush(applicants, (doc, interview))
answer = 1
comp_interview = heappop(applicants)[1]
while applicants:
now = heappop(applicants)
if now[1] < comp_interview:
comp_interview = now[1]
answer += 1
print(answer)
우선 서류심사 순위를 기준으로 지원자를 정렬합니다. 이때 최소힙을 사용하여 별도의 정렬 과정 없이 서류 순위가 높은 순부터 볼 수 있게 한다.
이제 applicants 힙에 있는 지원자들을 하나씩 뽑아서 기준점인 comp_interview 값과 뽑은 지원자의 면접 순위를 비교하여 뽑을지 말지 결정한다. 뽑는 대상은 면접 순위가 현재 기준인 comp_interview보다 순위가 높은 지원자이며, 지원자가 선발될 때마다 기준점을 뽑힌 대상자의 면접 순위로 갱신해준다.