https://www.acmicpc.net/problem/2493
2493번: 탑
첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1
www.acmicpc.net
<코드>
1. 통과
import sys
input = sys.stdin.readline
n = int(input())
arr = list(map(int, input().split()))
stack = []
result = [0]*n
for i in range(n-1, -1, -1):
while True:
if stack and stack[-1][0] < arr[i]:
value, idx = stack.pop()
result[idx] = i+1
else:
break
stack.append((arr[i], i))
print(*result)
2. 시간초과
import sys
input = sys.stdin.readline
n = int(input())
arr = list(map(int, input().split()))
result = [0]
for i in range(1, n):
for j in range(i-1, 0, -1):
if arr[j] >= arr[i]:
result.append(j+1)
break
else:
result.append(0)
print(*result)
<풀이방법>
2중 for문으로 나보다 높은거 찾으면 idx값 넣고 break했는데.. 시간초과남
stack으 오른쪽부터 시작해서 스택 젤 마지막 값보다 지금 값이 더 크면 pop하고 result의 해당 인덱스에 지금 인덱스 넣어주고 반복해준다.
'파이썬' 카테고리의 다른 글
[백준 파이썬] 1850번 최대공약수 (0) | 2022.08.24 |
---|---|
[프로그래머스 파이썬] Lv2. 멀쩡한 사각형 (1) | 2022.08.23 |
[백준 파이썬] 2565번 전깃줄 (0) | 2022.08.21 |
[BOJ PYTHON] 2343번 기타레슨 (0) | 2022.08.20 |
[BOJ PYTHON] 1080번 행렬 (0) | 2022.08.17 |