처음에 우직하게 O(n**2)로 맛있게 먹을려고 했으나
시간초과로 인해 제출을 못했다
n = int(input())
arr = list(map(int,input().split()))
answer = [0]
for i in range(1,len(arr)):
k=True
for j in range(i-1,-1,-1):
if arr[i]<=arr[j]:
answer.append(j+1)
k=False
break
else:continue
if k :
answer.append(0)
print (" ".join(map(str,answer)))
그래서 스택을 사용해서 풀었다
왼쪽, 즉 현재 있는 요소보다 큰 값을 가진 전의 요소 중 제일 최근요소를 가져오는게 포인트였는데 스택을 통해서 구현했다
스택에 제일 최상단의 요소부터 지금 요소와 비교해서 큰 값이 있으면 answer에 번호를 추가하고 아니면 스택을 pop시켜서 해결했다.
그리고 while문을 나오면서 스택에 현재 요소를 넣어서 최신화를 했고 stack이 비어있을 때 아무것도 통과하지 못한 것이므로 answer에 0을 추가했다.
n= int(input())
arr = list(map(int,input().split()))
stack=[]
answer=[]
for i in range(len(arr)):
while stack:
if stack[-1][1]>arr[i]:
answer.append(stack[-1][0]+1)
break
else :
stack.pop()
if len(stack)==0:
answer.append(0)
stack.append([i,arr[i]])
print (" ".join(map(str,answer)))