미소를뿌리는감자의 코딩

[백준 2024/02/23] 1946번 신입 사원 본문

코딩 테스트/백준

[백준 2024/02/23] 1946번 신입 사원

미뿌감 2024. 2. 23. 20:06
728x90

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

 

1946번: 신입 사원

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

www.acmicpc.net

 

1. 접근 방법

다른 이보다, 2가지의 평가 기준 모두 떨어지는 이는 탈락하게 된다.

그랬을 때, 합격 인원 수를 구하는 것이 이번 문제의 목표이다.

 

 

이 문제를 예로 들어서 설명을 해볼 것이다.

 

2개의 입력 중에서 7개의 지원자를 가지는 예시를 가지고 설명을 해볼 것이다.

[[3, 6], [7, 3], [4, 2], [1, 4], [5, 7], [2, 5], [6, 1]]
[[1, 4], [2, 5], [3, 6], [4, 2], [5, 7], [6, 1], [7, 3]]

 

7개의 input에 대해서 list로 정리를 해주었다.

이후 .sort()를 통해서, 서류 시험 결과를 기준으로 정리해주었다.

 

이후 가장 높은 Interview_rank를 기억해주면서, 앞에서 부터 뒤로 정렬된 리스트를 읽어나갈 것이다.

 

서류상으로 이미 정렬된 리스트이기 때문에, 앞 지원자에서 나온 면접 순위보다 뒤 면접자에서 나온 면접 순위가 낮다면, 해당 지원자는 서류에서도, 면접에서도 낮은 순위를 가지게 되기 때문에, 해당 지원자는 통과할 수 없게 되는 것이다.

 

이를 하나씩 비교해가면서 더 이해를 해보자.

highest_rank  는 가장 낮은 순위인 보다 하나 더 큰 8 등을 저장해 두었다.

[서류 순위, 면접 순위] 로 저장이 되어 있다.

 

[1, 4] 에서 4는 현재 저장되어 있는 highest_rank 보다 높은 순위를 가지므로 highest_rank를 갱신해준다. ( highest_rank = 4)

다음으로 넘어가서 

 

[2, 5] 이는 현재 highest_rank 인 4 보다 낮은 순위인 5를 가지고 있다. 즉, 서류에서도 앞에 있는 이보다 낮은데, 면접도 낮은 순위를 가지므로 해당 면접자는 통과할 수 없다.

 

다음으로,

[3, 6] 해당 면접자도 현재 highest_rank 인 4 보다 낮은 순위인 6을 가지므로, 통과할 수 없다.

 

다음으로,

[4, 2] 해당 면접자는 현재 highest_rank 보다 높은 순위인 2 를 가지고 있다. 따라서 highest_rank 는 2로 갱신된다.

 

다음으로,

[5, 7] 해당 면접자는 현재 highest_rank 인 2 보다 낮은 면접 순위 7을 지니므로 통과할 수 없다.

 

다음으로,

[6, 1] 해당 면접자는 현재 highest_rank 인 1 보다 높은 면접 순위를 가지므로 통과할 수 있다. 또한 highest_rank는 1로 갱신된다.

 

마지막으로, 

[7, 3] 의 경우, 현재 highest_rank인 1보다 낮은 순위를 가지므로 통과할 수 없다. 

 

이런식으로 풀어주었다.

 

2. 코드

def passed_num(total):
    passed = len(total)
    highest_interview_rank = len(total) + 1
    for paper, interview_rank in total:
        if highest_interview_rank < interview_rank:
            passed -= 1
            continue
        highest_interview_rank = interview_rank

    return passed


def save_opponents_information():
    total = []
    for i in range(int(input())):
        total.append(list(map(int, input().split())))

    total.sort()
    return total


def main():
    for i in range(int(input())):
        total = save_opponents_information()
        print(passed_num(total))


if __name__ == "__main__":
    main()

 

 

 

728x90