[Gold IV] Title: 오큰수, Time: 824 ms, Memory: 149160 KB -BaekjoonHub

This commit is contained in:
SSUM
2025-11-13 23:16:47 +09:00
parent db96673fa8
commit 8161c6673d
2 changed files with 47 additions and 0 deletions

View File

@@ -0,0 +1,30 @@
# [Gold IV] 오큰수 - 17298
[문제 링크](https://www.acmicpc.net/problem/17298)
### 성능 요약
메모리: 149160 KB, 시간: 824 ms
### 분류
자료 구조, 스택
### 제출 일자
2025년 11월 13일 23:14:26
### 문제 설명
<p>크기가 N인 수열 A = A<sub>1</sub>, A<sub>2</sub>, ..., A<sub>N</sub>이 있다. 수열의 각 원소 A<sub>i</sub>에 대해서 오큰수 NGE(i)를 구하려고 한다. A<sub>i</sub>의 오큰수는 오른쪽에 있으면서 A<sub>i</sub>보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오큰수는 -1이다.</p>
<p>예를 들어, A = [3, 5, 2, 7]인 경우 NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1이다. A = [9, 5, 4, 8]인 경우에는 NGE(1) = -1, NGE(2) = 8, NGE(3) = 8, NGE(4) = -1이다.</p>
### 입력
<p>첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A<sub>1</sub>, A<sub>2</sub>, ..., A<sub>N</sub> (1 ≤ A<sub>i</sub> ≤ 1,000,000)이 주어진다.</p>
### 출력
<p>총 N개의 수 NGE(1), NGE(2), ..., NGE(N)을 공백으로 구분해 출력한다.</p>

View File

@@ -0,0 +1,17 @@
import sys
input = sys.stdin.readline
n = int(input())
li = list(map(int, input().split()))
stack = []
ans = [0] * n
for i in range(n):
while stack and li[stack[-1]] < li[i]:
ans[stack.pop()] = li[i]
stack.append(i)
while stack:
ans[stack.pop()] = -1
print(" ".join(map(str, ans)))