728x90

'스택으로 풀 수 있는 꽤 어려운 문제' 라길래 풀어 보았다.

from sys import stdin

N = int(stdin.readline())
data = list(map(int, stdin.readline().split()))

stack = [data[-1]]
result = [-1]

# 뒤에서 두번째부터
for i in range(len(data)-2, -1, -1):
    if stack:
        # 스택의 top이 탐색하는 데이터보다 크다면 == 오큰수가 있음
        if data[i] < stack[-1]:
            result.append(stack[-1])
            # 우선 스택에 집어넣는다
            stack.append(data[i])
        # 스택의 top보다 탐색하는 데이터가 크다면
        else:
            # 스택의 top을 하나씩 빼다가
            while stack:
                # 오큰수가 있음을 발견하면 break
                if data[i] < stack[-1]:
                    break
                stack.pop()
            # 스택이 다 비었다면 == 오큰수가 없음
            if stack:
                result.append(stack[-1])
            # 오큰수가 잇음
            else:
                result.append(-1)
            # 마지막으로 데이터를 스택에 추가
            stack.append(data[i])
    else:
        result.append(-1)

print(*result[::-1]) # unpacking 사용

'PS > Python' 카테고리의 다른 글

[BOJ_Python] 2583. 영역 구하기  (0) 2021.03.22
[BOJ_Python] 10026. 적록색약  (0) 2021.03.22
[BOJ_Python] 1707. 이분 그래프  (0) 2021.03.10
[BOJ_Python] 2178. 미로 탐색  (0) 2021.03.07
[BOJ_Python] 2206. 벽 부수고 이동하기  (0) 2021.03.07
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기