1946. 신입사원
1946번: 신입 사원
첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성
www.acmicpc.net
- 내 풀이
- 서류 점수 낮은것부터 위로 전부 비교하려고 해서 시간초과
- 테케는 맞았지만 시간초과
#서류, 면접 두개가 모두 나보다 잘난 사람이 있으면 안됨
#선발가능한 최대 인원 수
import heapq
test=int(input())
for tc in range(test):
n=int(input())
employee=[]
cnt=n
for i in range(n):
#서류 성적, 면접 순위
a,b=map(int,input().split())
heapq.heappush(employee, (-a,b))
for i in range(n):
a,b=heapq.heappop(employee)
lst=[]
for i in range(n-i-1):
a2,b2=heapq.heappop(employee)
if b2<b: #면접 점수도 처음게 더 낮으면
cnt-=1
lst.append((a2,b2))
break
else:
lst.append((a2,b2))
lst.extend(employee)
employee=lst[:]
heapq.heapify(employee)
print(cnt)
- 다른 사람 풀이
- 서류 점수로 정렬한 후 면접 점수가 더 높은 값으로 치환하면서 아래값들 비교
#서류, 면접 두개가 모두 나보다 잘난 사람이 있으면 안됨
#선발가능한 최대 인원 수
import heapq
test=int(input())
for tc in range(test):
n=int(input())
employee=[]
cnt=1 #1등은 무조건 채용
for i in range(n):
#서류 성적, 면접 순위
a,b=map(int,input().split())
heapq.heappush(employee, (a,b))
lst=[]
idx=1
a,b=heapq.heappop(employee)
for i in range(1,n):
a2,b2=heapq.heappop(employee) #a2가 a보다 서류점수는 낮은데
if b2<b: #면접 점수는 b2가 더 높으면
a=a2
b=b2
cnt+=1
continue
print(cnt)
'코딩테스트 > BOJ' 카테고리의 다른 글
| [백준] 2812.크게 만들기 (0) | 2023.04.01 |
|---|---|
| [백준] 1092. 배 (0) | 2023.04.01 |
| [백준] 18405. 경쟁적 전염 (0) | 2023.04.01 |
| [백준] [최장 증가 부분 수열] 11053. 가장 긴 증가하는 부분 수열 (0) | 2023.03.31 |
| [백준] [DFS] [백트래킹] 10971. 외판원 순회2 (0) | 2023.03.31 |