import sys
T = int(input())
for tc in range(T):
N = int(input())
result = 0
arr = [list(map(int,sys.stdin.readline().split())) for _ in range(N)]
arr.sort()
min_value = arr[0][1]
for ind in range(N):
if ind == 0:
result += 1
else:
if min_value > arr[ind][1]:
min_value = arr[ind][1]
result += 1
print(result)
처음에 입력 받은 그 상태로 서류점수 자체로 sort를 해줬다. 그러면 1번 지원자를 제외한 나머지 지원자들은 이미 서류점수에서, 자기보다 잘 본 사람이 있는 것이다.
그렇기 때문에 면접점수에서 앞의 사람보다. 순위가 높으면, 두 분야에서 자기보다 잘 본 사람이 있는 것이기 때문에, 최종 탈락하는 것이다.
그래서, 제일 첫번째 지원자의 면접점수를 최소값으로 해주고, 이 값보다 좋은 순위가 있으면 교체를 해주면서 최종합격자 수를 늘려주면 된다.
하지만 이렇게 할시 무조건 처음에 sort를 해야하기 때문에 5000ms 이상의 시간이 걸린다.
import sys
T = int(input())
for tc in range(T):
N = int(input())
result = 1
arr = [0]*(N+1)
for _ in range(N):
x,y = map(int,sys.stdin.readline().split())
arr[x] = y
min_value = arr[1]
for ind in range(2,N+1):
if min_value > arr[ind]:
min_value = arr[ind]
result += 1
print(result)
개선한 방안은 어차피 중복되는 수는 없고 1~N 까지의 순위는 무조건 있기 때문에, 길이가 (N+1)인 1차원 리스트를 만들어주고, index가 서류점수 value가 면접점수가 되도록 한다.
그리고 그 다음은 위와 똑같이 진행해주면 된다.
sort를 진행하지 않기 때문에 실행시간이 확연히 줄어드게 된다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 2624 동전 바꿔주기 (0) | 2021.01.22 |
---|---|
[BOJ/백준] 17142 연구소3 (0) | 2021.01.22 |
[BOJ/백준] 14226 이모티콘 (0) | 2021.01.22 |
[BOJ/백준] 1753 최단경로 (실패사례도 있음) (0) | 2021.01.21 |
[BOJ/백준] 1068 트리 (0) | 2021.01.20 |