문제 링크
문제 요약
1. 선발 가능한 최대 신입 사원 수 구하기
2. 서류, 면접점수 둘 다 다른 지원자의 점수에 비해 떨어진다먼 뽑히지 못한다.
어떻게 풀어야 할까?
1. 조건의 폭을 좁히면 편할 것 같다
-> 점수 리스트를 서류 or 면접 순위기준으로 정렬해보자.
2. 선발 가능한 신입사원을 구하는 조건이 필요하다
-> 정렬되지 않은 순위를 기준으로 조건을 만들어보자.
코드
import sys
t = int(input())
for _ in range(t):
n = int(input())
aplist = sorted([list(map(int, sys.stdin.readline().split(' '))) for _ in range(n)])
result = 1
m = aplist[0][1]
for ap in aplist[1:]:
if ap[1] < m:
result += 1
m = ap[1]
print(result)
코드 풀이
line 6. 순위 리스트를 서류 순위 기준으로 오름차순 정렬하여 aplist에 대입한다
line 10. 리스트의 첫 요소 중 면접 순위를 현재 가장 낮은 면접 점수라고 대입한다
line 12. index 1부터 (첫 요소는 서류 순위가 가장 높음으로 항상 선발) 시작해서 현재 가장 낮은 면접 순위보다 순위가 높다면 result +1 해주고 m에 대입한다.
피드백
1. 순위가 주어진 리스트를 점수로 알아 반대로 문제는 풀었다.
-> 문제를 정확히 읽지 않은 실수가 컸다.
2. import sys 모듈을 사용하였는데, 사용 전에는 결과가 시간초과였다.
구글링 결과 결론은 반복적으로 입력을 받을 때엔 input()보단 sys.stdin.readline()이 성능면에서 좋다라는 것이었다.
-> 특히 코딩 테스트에서 자주 사용된다고 하니 기억 할 것!
3. 한번에 해결하려는 습관과 머리로 계산하려는 습관이 더해져 시간이 오래 걸렸다.
-> 차근차근, 하나씩 해결하면서 하도록 하자.