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
๋ฌธ์
ํฌ๊ธฐ๊ฐ N์ธ ์์ด A = A1, A2, ..., AN์ด ์๋ค. ์์ด์ ๊ฐ ์์ Ai์ ๋ํด์ ์คํฐ์ NGE(i)๋ฅผ ๊ตฌํ๋ ค๊ณ ํ๋ค. Ai์ ์คํฐ์๋ ์ค๋ฅธ์ชฝ์ ์์ผ๋ฉด์ Ai๋ณด๋ค ํฐ ์ ์ค์์ ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ์๋ฅผ ์๋ฏธํ๋ค. ๊ทธ๋ฌํ ์๊ฐ ์๋ ๊ฒฝ์ฐ์ ์คํฐ์๋ -1์ด๋ค.
์๋ฅผ ๋ค์ด, 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์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ด A์ ํฌ๊ธฐ N (1 ≤ N ≤ 1,000,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์ ์์ด A์ ์์ A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ด N๊ฐ์ ์ NGE(1), NGE(2), ..., NGE(N)์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด ์ถ๋ ฅํ๋ค.

๋ฌธ์ ํ์ด
- ๋ ์์ฃผ ํ์ด๋ดค๋ ์คํ ์ ํ..!
- ์ค๋ฅธ์ชฝ ์ ์ค ์์ ๋ณด๋ค ํฌ๋ฉด์ ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ์๋ฅผ ํ์ํ๋ฏ๋ก, ์์ด์ ๋งจ ์ค๋ฅธ์ชฝ ์๋ถํฐ ํ์์ ์์ํ๋ค.
- ์์ ๋ณด๋ค ํฐ ๊ฐ์ด stack์ top์ ์์นํ ๋๊น์ง ๋ชจ๋ popํด์ฃผ๊ณ , stack์ ๋จ์ ๊ฐ์ด ์์ผ๋ฉด stack์ top์ด ์์ ์ ์คํฐ์๊ฐ ๋๋ค.
import sys
n=int(sys.stdin.readline())
numbers=list(map(int, sys.stdin.readline().split(' ')))
ans=[-1]*n
stack=[]
stack.append(numbers[n-1])
for i in range(n-2, -1, -1):
# ์์ ๋ณด๋ค ํฐ ๊ฐ์ด stack์ top์ ์์นํ ๋๊น์ง pop
while stack and stack[-1]<=numbers[i]:
stack.pop()
# stack์ ๋จ์ ๊ฐ์ด ์์ผ๋ฉด
if stack:
ans[i]=stack[-1]
stack.append(numbers[i])
print(*ans, sep=' ')
'์๊ณ ๋ฆฌ์ฆ > ์ ํ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 11000 ๐ฅ] ๊ฐ์์ค ๋ฐฐ์ (1) | 2023.10.07 |
---|---|
[๋ฐฑ์ค 6198 ๐ฅ] ์ฅ์ ์ ์ ๊พธ๋ฏธ๊ธฐ (1) | 2023.10.07 |
[๋ฐฑ์ค 1406 ๐ฅ] ์๋ํฐ (0) | 2023.09.28 |
[๋ฐฑ์ค 9549 ๐ฅ] ์ํธํ๋ ๋น๋ฐ๋ฒํธ (0) | 2023.08.24 |
[๋ฐฑ์ค 22866 ๐ฅ] ํ ๋ณด๊ธฐ (0) | 2023.08.15 |