알고리즘, 코딩테스트/BOJ 문제풀이
[BOJ 1946] 신입사원 :: python 파이썬
우징어🦑
2022. 4. 24. 21:38
입력이 많은 문제이다. 시간 초과가 나면 input 대신 sys.stdin.readline() 을 사용할 것!!
* 처음에는 주어진 숫자들이 순위가 아니라 점수인 줄 알고 문제 이해를 못했었다.. 문제를 잘 읽자!!
우선 첫번째 순위로 정렬을 해준다.
1 4
2 3
3 2
4 1
5 5
그러고 나면 두번째 순위만 따져주면 된다.
rank라는 변수에 첫번째 사원의 두번째 순위를 초기값으로 넣어준다.
아래 사람으로 갈수록 첫번째 순위는 전 사람보다 낮기에 두번째 순위가 rank(이전 사원의 순위)보다 커야 선발이 된다.
1 4
2 3
이 두 사람을 비교할 땐, rank=4와 3을 비교하게 된다. 4등보다 3등이 높으므로 두번째 사람은 선발된다.
rank는 더 높은 순위의 것으로 업데이트해준다.
4 1
5 5
이 두 사람을 비교할 땐, rank = 1과 5를 비교하게 된다.
이때는 1등보다 5등이 낮으므로 다음 사람은 선발되지 않는다.
이때 rank는 업데이트되지 않는다.
import sys
def solution(employees, n):
answer = n
employees.sort(key=lambda x: x[0])
rank = employees[0][1]
for i in range(1, n):
if employees[i][1] > rank:
answer -= 1
else:
rank = employees[i][1]
return answer
T = int(input())
for _ in range(T):
N = int(input())
employees = []
for _ in range(N):
s1, s2 = map(int, sys.stdin.readline().split())
employees.append([s1, s2])
print(solution(employees, len(employees)))
https://www.acmicpc.net/problem/1946
1946번: 신입 사원
첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성
www.acmicpc.net