Notice
Recent Posts
Recent Comments
Link
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Jinny Kong’s blog

19th KOALA 8주차 본문

KOALA

19th KOALA 8주차

Jinny Kong 2025. 8. 24. 23:58

코알라 8주차~!!( •̀ ω •́ )✧

 

 

백준 17298번 : 오큰수 

 

수열 A가 있을 때, 각 원소 Ai에 대해서 Ai의 오른쪽에 있으면서 Ai보다 큰 수 중 가장 왼쪽에 있는 수를 구하는 문제이다.
만약 그런 수가 존재하지 않으면 -1을 출력해야 한다!!

 

먼저 내 전체 코드는 이러하다!!  ‎(  ˘ω˘ )و ̑̑

import sys
input = sys.stdin.readline

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

ans = [-1] * n        # 기본값은 -1(오큰수가 없을 수도 있으므로)
st = []               # 인덱스를 저장할 스택

for i in range(n):
    # 스택이 비어있지 않고, 현재 값이 스택 top 인덱스의 값보다 크면
    while st and A[st[-1]] < A[i]:
        ans[st.pop()] = A[i]   # 그 인덱스의 오큰수를 현재 값으로 갱신
    st.append(i)               # 현재 인덱스를 스택에 push

print(*ans)

 

 

 

코드를 하나하나 설명해보자면...!! ( ⸝•ᴗ•⸝)

ans = [-1] * n
st = []


기본적으로 모든 원소의 오큰수를 -1로 초기화한다. (없으면 그대로 -1을 반환한다!)

st는 아직 오큰수를 찾지 못한 인덱스를 저장할 스택이다. 

 

 

for i in range(n):

    while st and A[st[-1]] < A[i]:
        ans[st.pop()] = A[i]  
    st.append(i)

 

먼저 배열을 왼쪽에서 오른쪽으로 탐색하면서, 현재 값(A[i])을 기준으로 스택에 쌓인 값들과 비교한다.

스택에는 "아직 오큰수를 찾지 못한 인덱스들"이 저장되어 있다. 만약 현재 값이 스택 top 인덱스의 값보다 크다면, 그 인덱스의 오큰수는 현재 값임이 확정된다. 따라서 ans[st.pop()] = A[i]로 오큰수를 갱신한다. 현재 값도 앞으로 나올 값들에 대해 오큰수가 될 수 있으므로 스택에 넣는다. (⌒▽⌒)☆

 

 

 

'KOALA' 카테고리의 다른 글

19th KOALA 4주차  (5) 2025.07.27
19th KOALA 3주차  (4) 2025.07.20
19th KOALA 2주차  (0) 2025.07.13
19th KOALA 1주차  (0) 2025.07.06
18th Koala 8주차  (0) 2025.05.25