problem-17298

ysysc·2022년 11월 21일
0

PS

목록 보기
29/47

과정
1. stack을 이용해서 i값이 stack[-1]값보다 작으면 그대로 스택에 추가
2. stack[-1]값보다 크면 스택안에 있는 값들을 비교하여 작은 것들은 모두 i 값을 오큰수로 설정
3. index 설정을 위해 리스트를 index,value 튜플로 받음
4. 마지막에 스택에 남아있는 수들은 모두 오큰수를 -1로 설정
5. join을 이용해서 출력

join의 경우, list안의 원소가 str일 경우만 가능해서 map(str,result)를 이용해서 출력

import sys
input=sys.stdin.readline

n=int(input())
a=list(map(int,input().split()))
for i in range(len(a)):
    a[i]=(i,a[i])

stack=[]
result=[0 for i in range(n)]
for i in a:
    if not stack:
        stack.append(i)
    else:
        while True and stack:
            index, value=stack.pop()
            if value<i[1]:
                result[index]=i[1]
            else:
                stack.append((index,value))
                break
        stack.append(i)
for index,val in stack:
    result[index]=-1
                
print(' '.join(map(str,result)))

time:20분

ps. 스택 문제라는 걸 알고 풀어서 다시 풀어봐야겠다.

0개의 댓글