테스트 케이스가 많다보니 sys로 input = sys.stdin.readline 해주지 않으면 시간 초과가 발생했다.
import sys
input = sys.stdin.readline
for _ in range(int(input())):
n = int(input())
data = []
count = 1
for _ in range(n):
data.append(list(map(int, input().split())))
data.sort()
tmp = data[0][1]
for i in range(1, n):
if tmp > data[i][1]:
count += 1
tmp = data[i][1]
print(count)
서류와 면접중 한 점수를 기준으로 오름차순 정렬을 한 뒤
총 5명의 지원자 일 경우
서류 점수가 1등인 자의 면접 점수가 4일 경우
면접점수가 4보다 아래인 사람은 자동으로 탈락이다.
이런식으로 반복을 더해나가며 문제를 해결했다.
물론 처음부터 문제를 해결할 수 있었던건 아니였다.
for _ in range(int(input())):
n = int(input())
data = []
count = 0
for _ in range(n):
data.append(list(map(int, input().split())))
data.sort()
data2 = sorted(data, key= lambda x : x[1])
result = []
for i in range(data[0][1] + 1, n + 1):
result.append(i)
for i in range(data2[0][0] + 1, n + 1):
result.append(data[i - 1][1])
print(n - len(set(result)))
원래는 서류 점수 1등의 면접 점수를 기준으로 그보다 낮은 요소들을
list의 del을 이용해서 제거한 뒤, 남은 인원들의 인원수를 len(data)를 통해 정답을 구하려 했으나
len(data)의 변화를 for 문에서는 초기 len(data)의 값으로만 고정이 된다는 점을 착각하여 index out error가 발생하였다.
그래서 리스트를 서류 기준 / 면접 기준으로 2개로 나누어 풀어보았지만, 역시 시간초과가 발생하였다.
문제를 단순히 보고 직관적으로 해결할 수 있어야 하는데, 자꾸 스스로 어려운 방향으로 나아가는 것 같다.
그래도 솔직히 정형화 된 방법보단, 즉흥적으로 떠오르는 방법으로 딱 풀었을 때 그 손맛이 계속 코드를 두들기게 하는 것 같다.
하지만 내 실력이 쌓일 때 까지는 문제를 파악하고 정확한 해결법을 연상시켜 풀이할 수 있는 PS능력을 기르자!
'백준 알고리즘 (Baekjoon Algorithm)' 카테고리의 다른 글
[파이썬] 백준 알고리즘 No.1339 단어 수학 (0) | 2021.12.06 |
---|---|
[파이썬] 백준 알고리즘 No.4796 캠핑 (0) | 2021.12.06 |
[파이썬] 백준 알고리즘 No.10610 30 (0) | 2021.12.05 |
[파이썬] 백준 알고리즘 No.2217 로프 (0) | 2021.12.05 |
[파이썬] 백준 알고리즘 No.1026 보물 (0) | 2021.12.04 |