문제풀이) 백준 - 1946 / 신입 사원

velg·2021년 5월 8일
0

문제 링크

문제 요약

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. 한번에 해결하려는 습관과 머리로 계산하려는 습관이 더해져 시간이 오래 걸렸다.
-> 차근차근, 하나씩 해결하면서 하도록 하자.
profile
초보 개발자

0개의 댓글