시간 초과 이유 : 해당 요소보다 더 작은 요소들은 그냥 pop해버리고 따로 저장해두지 않아도 된다. 그런데 따로 저장해두고 다시 이어 붙이는 과정이 있어서 시간초과가 발생했다.
N = int(input())
H = list(map(int, input().split()))
stack = []
for i in range(N):
while stack:
top = H[stack[-1]]
if top > H[i]:
break
stack.pop()
if stack == []:
print(0)
else:
print(stack[-1]+1)
stack.append(i)
문제에서 레이저는 왼쪽으로만 발사된다고 했다. 즉 방향이 하나뿐이다.
해당 노드 기준으로 왼쪽에 있는 노드들 중에서 가장 가까운 큰 노드가 정답이 된다. 스택의 경우 가장 최신의 노드 (=거리가 가까운 노드)가 최상위 노드에 있다. 또한 스택은 순서가 유지된다.