백준 #17298 오큰수 (파이썬)

Yongjun Park·2022년 5월 27일
0

PS(Problem Solving)

목록 보기
24/31

문제 링크

백준 문제 탭 중 문제 순위 탭을 이용하여 위에서부터 문제를 풀다가 발견한 문제.


알고리즘 분류를 봐버려서 김샜다.
스택인지 몰랐다면 정말 오래 걸렸을 문제다.
그래서 난이도도 골드 4.

Answer #1

import sys

N = int(sys.stdin.readline().rstrip())
A = list(map(int, sys.stdin.readline().rstrip().split()))

stack = []
answer = [-1] * len(A)
for i in range(len(A)):
    while stack and stack[-1][1] < A[i]:
        idx, _ = stack.pop()
        answer[idx] = A[i]
    stack.append((i, A[i]))
print(*answer)

Answer #2: 리팩토링

import sys

N = int(sys.stdin.readline().rstrip())
A = list(map(int, sys.stdin.readline().rstrip().split()))

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

굳이 val을 저장할 필요가 없었다!
Answer #1에서도 val을 _ 변수로 꺼냈으니 말이다.

profile
추상화되었던 기술을 밑단까지 이해했을 때의 쾌감을 잊지 못합니다

0개의 댓글