백준1946(파이썬) - 신입사원

resilient

·

2021. 5. 22. 17:05

728x90
반응형

https://www.acmicpc.net/problem/1946

 

1946번: 신입 사원

첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성

www.acmicpc.net

  • 이 문제는 문제를 정말 잘 읽어야 한다. 주어지는 값이 순위인데 나는 점수로 착각해서 계속 삽질했다.
  • 그 다음은 그리디라는 점을 알았고, 정렬을 해줘야겠다고 판단했다. 일단 서류점수 기준으로 정렬을 해줬다.
  • 서류점수가 1등이면 무조건 뽑히니까 cnt를 1로 해놓고, 그 다음 서류점수로 정렬된 데이터에서 면접 점수를 for문을 돌려주면서 면접 점수 등수가 i 보다 i+1 이 높으면 그 참가자 또한 뽑힌다고 생각했다.
  • 코드는 다음과 같다.
import sys
input = sys.stdin.readline
t = int(input())
for _ in range(t):
    n = int(input())
    cnt = 1
    data = []
    for i in range(n):
        a,b = map(int,input().split())
        data.append([a,b])
    data.sort(key=lambda x:x[0])
    max_people_idx = data[0][1]
    # 문제 잘읽기... 순위다........
    for i in range(n):
        # data[i][0]로 정렬해서 for문으로 돌린다는거 자체가 i+1 번째 사람은 얼마든지 떨어질수있다. 
        # 근데 면접점수 data[i][1]값이 비교되는 대상보다 작게되면 살아남는 것이다.
        if max_people_idx > data[i][1]:
            cnt+=1
            max_people_idx = data[i][1]
    print(cnt)
반응형