문제 바로가기: https://www.acmicpc.net/problem/17298
# 시간초과
a = int(input())
b = list(map(int,input().split()))
c = []
for i in range(a-1):
for j in range(i+1,a):
if b[j]>b[i]:
c.append(str(b[j]))
break
else:
c.append('-1')
c.append('-1')
print(' '.join(c))
생각난대로 이중for문으로 풀었으나 어림도 없지 바로 시간초과^^
이거 말고도 filter와 next를 이용하여 구현해보았으나 시간초과...
결국 고민하다 다른 사람의 풀이를 봤다
import sys
input = sys.stdin.readline
a = int(input())
b = list(map(int,input().split()))
c = [-1] * a
stack = [0] # 스택을 사용하면 시간을 줄일 수 있다
for i in range(1,a):
while stack and b[stack[-1]]<b[i]:
c[stack.pop()] = b[i]
stack.append(i)
print(*c) # 새롭게 알게된거
a = 4
b = [3, 5, 2, 7]
c = [-1, -1, -1, -1]
for i in range(1,a):
while stack and b[stack[-1]]<b[i]:
c[stack.pop()] = b[i]
stack.append(i)
stack 있고 b[0]<b[1] 조건 만족 while문: c[0]=b[1] : stack.append(1)
stack = [1]
c = [5, -1, -1, -1]
stack 있으나 b[1]<b[2] 조건 안됨 (while문 건너뜀) : stack.append(2)
stack = [1, 2]
c = [5, -1, -1, -1]
stack 있고 b[2]<b[3] 조건 만족 while문: c[2]=b[3]
stack = [1]
c = [5, -1, 7, -1]
stack에 값이 아직 남아있으니 while문 계속
b[1]<b[3] 조건 만족 while문: c[1]=b[3] : stack.append(3)
c = [5, 7, 7, -1]
개인적으로 stack...pop, while 저 동작원리 보고 이해하는데 좀 애먹었다ㅠㅠ