백준 1946번 신입 사원
백준 1946번 신입 사원
- 문제를 잘 읽어야한다. 성적의 순위를 입력 받으니깐 더 작은 값일수록 성적이 좋음.
- 서류랑 면접중 적어도 한개만 다른 지원자들보다 떨어지지 않으면 입사가능.
- 서류 성적 순위를 오름차순으로 정렬해서 서류성적이 가장 좋은 리스트의 첫번째 부분은 적어도 서류성적은 무조건 다른 지원자보다 좋으므로 답으로 가능.
- 그 뒤에 애들은 서류 성적이 전애들보다 무조건 안좋음. 그래서 면접 성적이 더 좋아야 입사 가능. 첫 친구의 면접 성적을 저장해두고 비교해가면서 만약 면접 성적이 더 좋으면(순위가 더 작으면) 서류 성적은 안좋지만 면접 성적은 좋으므로 답 가능임. 그 다음 면접 성적 비교 변수도 계속 지금까지의 가장 좋은 면접 성적 순위로 업데이트 해줘야함.
코드
import sys
input = sys.stdin.readline
for _ in range(int(input())):
n = int(input())
"""
서류 성적 순위순으로 오름차순 정렬을 하면
배열 첫번째의 서류 성적이 가장 좋으니깐
서류, 면접중 서류는 무조건 성적이 더 좋으므로
한개만 좋으면 입사할 수 있으므로 픽하고
두번째부터 뒤쪽 끝까지는 서류는 무조건 성적이 안좋으니깐
{면접 성적 순위를 비교}(이건 밑에 있음)하면서 답을 체크하면된다.
"""
scores = sorted([list(map(int, input().strip().split())) \
for x in range(n)], key = lambda x : x[0])
"""
서류 성적 가장 좋은 리스트의 첫번째는 무조건 입사 가능하므로
answer 1부터 시작해줌.
문제에서 둘중에 서류심사 성적과 면접시험 성적 중
적어도 하나가 다른 지원자보다 떨어지지 않는 자만 선발하는데
서류성적이 가장 좋으니깐 무조건 가능
"""
answer = 1
"""
m(min)에 우선 첫번째 면접 순위를 넣어주고,
뒤에 for문에서 인덱스 1부터 끝까지 비교한다.
"""
m = scores[0][1]
"""
면접 성적 순위가 m보다 더 작으면 즉, 순위가 더 작으니깐 성적이 더 좋음
지금 서류 성적 순위를 오름차순 정렬 했으니깐 서류 성적이 안좋은 순으로 되있어서
면접순위가 성적이 더 좋다면 적어도 한개(면접) 성적이 더 좋으니깐 답이 가능함
그리고 m도 면접 성적의 순위가 작은 즉, 면접 성적 점수가 더 높은걸로 업데이트하고
계속 그 m으로 비교하면 면접 순위가 가장 낮은걸로 비교해서 완벽함
"""
for i in range(1, n):
if scores[i][1] < m:
m = scores[i][1]
answer += 1
print(answer)