17298: 오큰수

ewillwin·2023년 2월 24일
0

Problem Solving (BOJ)

목록 보기
2/230

import sys
from collections import deque

N = int(input())

A = list(map(int, sys.stdin.readline()[:-1].split(' ')))
stack = []; stack.append(0) #stack에는 index를 저장
ans = ['-1' for i in range(N)]

for i in range(1, N):
    while A[stack[-1]] < A[i]:
        if not stack:
            break
        ans[stack.pop()] = str(A[i])
        if not stack:
            break
    stack.append(i)

print(' '.join(ans))
  • A 받을 때 str을 int로 map, map객체를 list로 변환
  • N이 1,000,000이라 O(N)으로 처리해야함
  • stack에는 A를 순회하며 A의 index를 저장
  • A[i]이 A[stack[-1]] 보다 크면 ans[stack[-1]]에 A[i]를 저장
  • for문에서 반복할 때마다 stack에 index 넣어줘야함 (예를 들어, A[1]가 A[2]보다 클 때, A[2]의 오큰수는 A[1]의 오큰수가 되기 때문)

profile
💼 Software Engineer @ LG Electronics | 🎓 SungKyunKwan Univ. CSE

0개의 댓글