본문 바로가기

환영합니다. 이 블로그 번째 방문자입니다.
Python/문제풀이

[ ➕ 오답노트] 백준 17298번 오큰수

👇🏻 문제

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


스택이란 이렇게 쓰는 거지를 알려주는 문제 같다.

스택에 인덱스를 넣어서 비교하는 방법과 스택에 값과 인덱스를 함께 넣어서 비교하는 방법이 있다.

 

나는 후자가 더 이해가 잘 가서 후자로...

 

import sys

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

answer = [-1] * A
stack = []

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

for i in answer:
    print(i, end=' ')

 

 

 배울 점 

1. 그렇지 않은 것에 -1를 출력하는 경우에는 애초에 답에 -1을 넣어놓자 (A를 굳이 문제에서 제시해준 이유)

2. 스택은 나중 값을 먼저 뺄 수 있다는 고리타분함에 창의력을 더해보잣

 

 

 

https://github.com/Seeun-Lim/BaekJoon/tree/master/%EC%8A%A4%ED%83%9D

 

GitHub - Seeun-Lim/BaekJoon: BaekJoon problems code

BaekJoon problems code. Contribute to Seeun-Lim/BaekJoon development by creating an account on GitHub.

github.com