본문 바로가기
파이썬/코딩 테스트 공부

백준 17298

by 코낄2 2023. 11. 3.

https://www.acmicpc.net/problem/17298

 

17298번: 오큰수

첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.

www.acmicpc.net

<내 풀이>

N = int(input())
A = list(map(int, input().split()))

answer = [-1] * N  # 결과 배열을 -1로 초기화
stack = []

for i in range(N):
    while stack and A[stack[-1]] < A[i]:
        answer[stack[-1]] = A[i]
        stack.pop()
    stack.append(i)

print(*answer)

> stack에는 따로 i를 저장함으로써 현재 값과 비교해야할 값들의 index 순번을 꺼내올 수 있습니다. 만약 현재 값이 이전 값보다 크다면, 이전 값들의 순번을 계속 꺼내보면서 현재값이 큰 동안 answer 배열의 값을 현재값으로 변경해줍니다.

'파이썬 > 코딩 테스트 공부' 카테고리의 다른 글

혼자 놀기의 달인  (0) 2024.04.27
과일 장수  (0) 2024.04.04
스택과 큐 /백준 1874  (1) 2023.11.02
백준 12891, 11003  (0) 2023.10.26
백준 2018, 1940, 1253  (1) 2023.10.24