https://www.acmicpc.net/problem/2493
2493번: 탑
첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1
www.acmicpc.net
풀이
이중 for문을 사용하면 시간초과가 발생할 수 있다.
파이썬은 1초당 2000만 번의 연산이 가능하다.
그렇기에 n은 최대 500,000이 입력 값으로 주어질 수 있다. 500,000,000,000 -> 5천억 번의 횟수는
주어진 시간제한인 1.5초에 위배된다.
그렇기에 스택을 사용해서 시간 복잡도를 줄여야 한다.
아래의 코드의 시간 복잡도는 O(n)이기에 50만 번의 연산이 이루어진다.
코드
# 2493번 탑
n = int(input())
tower_h = list(map(int, input().split()))
ans = []
stack = []
for i in range(n):
while stack:
# 수신 받을 수 있는 탑 후보 > 송신하는 탑
if stack[-1][1] > tower_h[i]:
ans.append(stack[-1][0])
break
else:
stack.pop()
if not stack:
ans.append(0)
stack.append([i+1, tower_h[i]])
print(" ".join(map(str, ans)))
출력결과
'백준 > 구현' 카테고리의 다른 글
[백준][Python] 13717번 포켓몬 GO - 실버 5 (0) | 2024.03.24 |
---|---|
[백준][Python] 14503번 로봇 청소기 - 코팩(지문 오류 존재) (2) | 2024.01.04 |
[백준][PyPy3] 1062번 가르침 - 코팩 (0) | 2023.08.31 |
[백준][Python] 2776번 암기왕 - 코팩 (0) | 2023.08.30 |
[백준][Python] 11653번 소인수분해 - 코팩 (0) | 2023.08.14 |