algorithm/Greedy

백준 1946 신입사원

hw.kr 2022. 8. 26. 16:53

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

 

1946번: 신입 사원

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

www.acmicpc.net

📌 해결 순서

 

문제에서 알수 있듯이 서류 , 면접 둘중 하나만 다른 지원자들보다 뒤쳐지지 않으면 탈락하지 않는다.

 

1. 우선 서류심사가 높은 순서대로 면접 지원자들을 정렬한다

2. 정렬이 되면, 나보다 뒤에 있는 지원자 때문에 탈락할 수 없다 (서류심사 순위가 더 높기 때문에) 

3. 앞에있는 지원자와 비교해보면, 서류심사가 나보다 높기 때문에 나보다 앞에 있는 모든 지원자의 면접순위보다 내가 높아야 탈락하지 않는다

4. 비교했을때 탈락하지 않는다면 현재 나의 면접순위가 제일 높음을 의미한다

5. 정렬된 후,  제일 처음 지원자는 탈락하지 않으므로 pass_cnt = 1 로 시작한다

 

📌 코드

import sys

testCnt = int(input())
pass_lst = []

for i in range(0, testCnt):
    n = int(input())
    lst = []

    for j in range(0, n):
        lst.append(list(map(int, sys.stdin.readline().split())))

    lst.sort(key=lambda x: x[0])

    pass_cnt = 1
    move_index = 0

    for i in range(1, len(lst)):
        if(lst[move_index][1] > lst[i][1]):
            pass_cnt += 1
            move_index = i

    pass_lst.append(pass_cnt)

for pass_cnt in pass_lst:
    print(pass_cnt)

 

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

백준 2839 설탕배달  (0) 2022.08.29
백준 1744 두 수 묶기  (0) 2022.08.29
백준 2812 크게 만들기  (0) 2022.08.28
백준 13305 주유소  (0) 2022.08.28
백준 1931 회의실 배정  (0) 2022.08.28