Algorithm/Greedy

[Python] 백준 1946번 신입사원

코딩쪼앙 2023. 3. 20. 15:41

문제

 

1946번: 신입 사원

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

www.acmicpc.net

입력

  • 첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성적, 면접 성적의 순위가 공백을 사이에 두고 한 줄에 주어진다. 두 성적 순위는 모두 1위부터 N위까지 동석차 없이 결정된다고 가정한다.

출력

  • 각 테스트 케이스에 대해서 진영 주식회사가 선발할 수 있는 신입사원의 최대 인원수를 한 줄에 하나씩 출력한다.

입력 예제

2
5
3 2
1 4
4 1
2 3
5 5
7
3 6
7 3
4 2
1 4
5 7
2 5
6 1

출력 예제

4
3

문제 풀이

  • 서류심사나, 면접 순으로 정렬
  • 그 후, 서류심사 순으로 정렬했다면 면접순위를 비교하여 면접순위가 더 높다면 카운트
  • 최종 채용 수 출력

코드

import sys
input = sys.stdin.readline
for tc in range(int(input())):
    array = []
    for applicant in range(int(input())):
        a, b = map(int,input().split())
        array.append((a, b))
    array.sort(key=lambda x:(x[0], x[1]))

    cnt = 1
    y = array[0][1]
    for i in range(1, len(array)):
        if y > array[i][1]:
            cnt += 1
            y = array[i][1]
    print(cnt)

'Algorithm > Greedy' 카테고리의 다른 글

[Python] 백준 16953번 A -> B  (0) 2023.03.24
[Python] 백준 10610번 30  (0) 2023.03.24
[Python] 볼링공 고르기  (0) 2023.01.16
[Python] 만들 수 없는 금액  (0) 2023.01.16
[Python] 문자열 뒤집기  (0) 2023.01.10