[BOJ][๐ก4][๋ฐฑ์ค#17298] ์คํฐ์
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold IV
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
ํฌ๊ธฐ๊ฐ 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)์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด ์ถ๋ ฅํ๋ค.
์์
์์ 1
์ ๋ ฅ
4
3 5 2 7
์ถ๋ ฅ
5 7 7 -1
์์ 2
์ ๋ ฅ
4
9 5 4 8
์ถ๋ ฅ
-1 8 8 -1
My Sol
import sys
input = sys.stdin.readline
from heapq import heappop, heappush
N = int(input())
arr = list(map(int, input().split()))
Q = []
ret = [-1]*N
for i in range(N):
heappush(Q, [arr[i], i])
while Q:
val, idx = heappop(Q)
if arr[i] > val:
ret[idx] = arr[i]
else:
heappush(Q, [val, idx])
break
print(*ret)
heap ์ฌ์ฉ
- ์ฃผ์ด์ง ์๋ค์ ํ ๋ฐฐ์ด์ ์ฒ๋ฆฌ
- 0๋ถํฐ N-1๊น์ง์ i์ ๋ํด ๋งค๋ฒ ๊ฐ๊ณผ ์ธ๋ฑ์ค๋ฅผ heapQ์ ์ฝ์
- Q์์ ํ์ฌ๊น์ง ๋์ ์ ์ค์ ๊ฐ์ฅ ๊ฐ์ด ์์ ๊ฐ๊ณผ ํด๋น ๊ฐ์ ์ธ๋ฑ์ค ์ถ์ถ
- arr[i]๊ฐ val๋ณด๋ค ํฌ๋ค๋ฉด, ์ด๋ค ์ธ๋ฑ์ค์ ์คํฐ์๋ฅผ ์ฒ์์ผ๋ก ๋ฐ๊ฒฌํ ๊ฒ. ret[idx]์ arr[i]๋ฅผ ๋ถ์ฌ(์คํฐ์ ๋ถ์ฌ)
- ์ด๋ฅผ ๋ฐ๋ณต
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋ชจ๋ฒ๋ต์
N = int(input())
nums = list(map(int,input().split(' ')))
out = [-1]*N
stack = [0]
for i in range(1,N):
while stack and nums[stack[-1]] < nums[i]:
j = stack.pop()
out[j] = nums[i]
stack.append(i)
print(" ".join(map(str,out)))
์ฐ์ฐ์๊ฐ์ด ๋์ 25% ์ ๋์ธ ํ์ด๋ฅผ ๋ถ์ํด๋ณด๋ ค ํ๋ค.
์ด ๋ถ์ stack์ ์ฌ์ฉํ์ จ๊ณ , stack์ index๋ง ๋ฃ์ผ๋ฉฐ ๋น๊ตํ์๋ค. heapq์ ์์์ ์ธ๋ฑ์ค๋ฅผ ๋ฃ๊ณ ๋นผ๊ณ ํ ํ์๊ฐ ์์ด stack์ ๋ง์ง๋ง ๊ฐ๋ง ๋น๊ตํ์์ผ๋ฏ๋ก ๋ถํ์ํ ๊ณผ์ ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ๋ก ์ ์ฌํ์ง ์์ ์ฐ์ฐ์๊ฐ์ด ์งง์์ ๊ฒ์ด๋ค.
ํ ๊ฐ์ง ์์ฌ์ด ๊ฑด ์ ์ถ๋ ฅ์ ๋ํด์ *out์ ํ์ง ์๊ณ join์ผ๋ก ํ์ด๋๋ค๊ฑฐ๋ .split()์ผ๋ก ๋ฉ์๋๋ฅผ ์ฒ๋ฆฌํ๋ฉด .split(โ โ)์ฒ๋ผ ๊ณต๋ฐฑ์ default๋ก ํ๋ค๋ ์ฌ์ค์ ๋ชจ๋ฅด๊ณ ๊ณ์ ๊ฒ ๊ฐ๋ค. ๊ทธ๋ฐ ๊ฒ์ ๋นํด ์๊ณ ๋ฆฌ์ฆ ์์ฒด๋ ๋ฐ์์ด ์ข์๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ