https://www.acmicpc.net/problem/17298
17298번: 오큰수
첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.
www.acmicpc.net
나의 코드
1. 이중 for문 (시간초과)
N = int(input())
arr = list(map(int, input().split()))
# ans = -1
for i in range(N):
ans = -1
for j in range(i+1, N):
if arr[i] < arr[j]: # 오른쪽 큰 수가 있을 때 출력하고 브레이크
ans = arr[j]
break
print(ans)
2. 스택에 인덱스를 이용한 풀이 (성공)
N = int(input())
arr = list(map(int, input().split()))
check = [-1]*N
stack = [0]
for i in range(1, N):
while stack and arr[stack[-1]] < arr[i]:
check[stack.pop()] = arr[i]
stack.append(i)
print(*check)
결과

이중 for문으로 가볍게 문제를 풀었는데 시간초과가 됐다. readline으로 읽는 속도를 빠르게 하면 시간초과 문제를 해결할 수 있지 않을까 했는데 그것도 안됐다. 스택으로 한번만 돌게끔 했더니 PyPy보다 속도가 느린 Python으로도 시간문제를 해결할 수 있다는게 너무 신기하다. 문제를 어떻게 푸느냐에 따라 결과가 달라진다는 것을 깊이 체감할 수 있는 문제였다.
'스터디 1일 1커밋' 카테고리의 다른 글
| 240313[BOJ/백준] 7983. 내일 할거야 (0) | 2024.03.13 |
|---|---|
| 240312 [BOJ/백준] 4673. 셀프 넘버 (0) | 2024.03.12 |
| 240312 [BOJ/백준] 17478. 재귀함수가 뭔가요? (0) | 2024.03.12 |
| 240310 [BOJ/백준] 1260. DFS와 BFS (0) | 2024.03.10 |
| 240310 [BOJ/백준] 16953. A -> B (0) | 2024.03.10 |