[BOJ][๐ŸŸก5][๋ฐฑ์ค€#02493] ํƒ‘

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #2493


๋ฌธ์ œ

KOI ํ†ต์‹ ์—ฐ๊ตฌ์†Œ๋Š” ๋ ˆ์ด์ €๋ฅผ ์ด์šฉํ•œ ์ƒˆ๋กœ์šด ๋น„๋ฐ€ ํ†ต์‹  ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์‹คํ—˜์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์‹คํ—˜์„ ์œ„ํ•˜์—ฌ ์ผ์ง์„  ์œ„์— N๊ฐœ์˜ ๋†’์ด๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ํƒ‘์„ ์ˆ˜ํ‰ ์ง์„ ์˜ ์™ผ์ชฝ๋ถ€ํ„ฐ ์˜ค๋ฅธ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ์ฐจ๋ก€๋กœ ์„ธ์šฐ๊ณ , ๊ฐ ํƒ‘์˜ ๊ผญ๋Œ€๊ธฐ์— ๋ ˆ์ด์ € ์†ก์‹ ๊ธฐ๋ฅผ ์„ค์น˜ํ•˜์˜€๋‹ค. ๋ชจ๋“  ํƒ‘์˜ ๋ ˆ์ด์ € ์†ก์‹ ๊ธฐ๋Š” ๋ ˆ์ด์ € ์‹ ํ˜ธ๋ฅผ ์ง€ํ‘œ๋ฉด๊ณผ ํ‰ํ–‰ํ•˜๊ฒŒ ์ˆ˜ํ‰ ์ง์„ ์˜ ์™ผ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐœ์‚ฌํ•˜๊ณ , ํƒ‘์˜ ๊ธฐ๋‘ฅ ๋ชจ๋‘์—๋Š” ๋ ˆ์ด์ € ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ์žฅ์น˜๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค. ํ•˜๋‚˜์˜ ํƒ‘์—์„œ ๋ฐœ์‚ฌ๋œ ๋ ˆ์ด์ € ์‹ ํ˜ธ๋Š” ๊ฐ€์žฅ ๋จผ์ € ๋งŒ๋‚˜๋Š” ๋‹จ ํ•˜๋‚˜์˜ ํƒ‘์—์„œ๋งŒ ์ˆ˜์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.ย  ์˜ˆ๋ฅผ ๋“ค์–ด ๋†’์ด๊ฐ€ 6, 9, 5, 7, 4์ธ ๋‹ค์„ฏ ๊ฐœ์˜ ํƒ‘์ด ์ˆ˜ํ‰ ์ง์„ ์— ์ผ๋ ฌ๋กœ ์„œ ์žˆ๊ณ , ๋ชจ๋“  ํƒ‘์—์„œ๋Š” ์ฃผ์–ด์ง„ ํƒ‘ ์ˆœ์„œ์˜ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ(์™ผ์ชฝ ๋ฐฉํ–ฅ)์œผ๋กœ ๋™์‹œ์— ๋ ˆ์ด์ € ์‹ ํ˜ธ๋ฅผ ๋ฐœ์‚ฌํ•œ๋‹ค๊ณ  ํ•˜์ž. ๊ทธ๋Ÿฌ๋ฉด, ๋†’์ด๊ฐ€ 4์ธ ๋‹ค์„ฏ ๋ฒˆ์งธ ํƒ‘์—์„œ ๋ฐœ์‚ฌํ•œ ๋ ˆ์ด์ € ์‹ ํ˜ธ๋Š” ๋†’์ด๊ฐ€ 7์ธ ๋„ค ๋ฒˆ์งธ ํƒ‘์ด ์ˆ˜์‹ ์„ ํ•˜๊ณ , ๋†’์ด๊ฐ€ 7์ธ ๋„ค ๋ฒˆ์งธ ํƒ‘์˜ ์‹ ํ˜ธ๋Š” ๋†’์ด๊ฐ€ 9์ธ ๋‘ ๋ฒˆ์งธ ํƒ‘์ด, ๋†’์ด๊ฐ€ 5์ธ ์„ธ ๋ฒˆ์งธ ํƒ‘์˜ ์‹ ํ˜ธ๋„ ๋†’์ด๊ฐ€ 9์ธ ๋‘ ๋ฒˆ์งธ ํƒ‘์ด ์ˆ˜์‹ ์„ ํ•œ๋‹ค. ๋†’์ด๊ฐ€ 9์ธ ๋‘ ๋ฒˆ์งธ ํƒ‘๊ณผ ๋†’์ด๊ฐ€ 6์ธ ์ฒซ ๋ฒˆ์งธ ํƒ‘์ด ๋ณด๋‚ธ ๋ ˆ์ด์ € ์‹ ํ˜ธ๋Š” ์–ด๋–ค ํƒ‘์—์„œ๋„ ์ˆ˜์‹ ์„ ํ•˜์ง€ ๋ชปํ•œ๋‹ค. ํƒ‘๋“ค์˜ ๊ฐœ์ˆ˜ N๊ณผ ํƒ‘๋“ค์˜ ๋†’์ด๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฐ๊ฐ์˜ ํƒ‘์—์„œ ๋ฐœ์‚ฌํ•œ ๋ ˆ์ด์ € ์‹ ํ˜ธ๋ฅผ ์–ด๋Š ํƒ‘์—์„œ ์ˆ˜์‹ ํ•˜๋Š”์ง€๋ฅผ ์•Œ์•„๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ.ย 


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํƒ‘์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 1 ์ด์ƒ 500,000 ์ดํ•˜์ด๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” N๊ฐœ์˜ ํƒ‘๋“ค์˜ ๋†’์ด๊ฐ€ ์ง์„ ์ƒ์— ๋†“์ธ ์ˆœ์„œ๋Œ€๋กœ ํ•˜๋‚˜์˜ ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. ํƒ‘๋“ค์˜ ๋†’์ด๋Š” 1 ์ด์ƒ 100,000,000 ์ดํ•˜์˜ ์ •์ˆ˜์ด๋‹ค.


์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ฃผ์–ด์ง„ ํƒ‘๋“ค์˜ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ๊ฐ์˜ ํƒ‘๋“ค์—์„œ ๋ฐœ์‚ฌํ•œ ๋ ˆ์ด์ € ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•œ ํƒ‘๋“ค์˜ ๋ฒˆํ˜ธ๋ฅผ ํ•˜๋‚˜์˜ ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ๋ ˆ์ด์ € ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ํƒ‘์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์ž…๋ ฅ

5
6 9 5 7 4


์ถœ๋ ฅ

0 0 2 2 4


My Sol

import sys
input = sys.stdin.readline
from heapq import heappop, heappush

N = int(input())
arr = list(map(int, input().split()))
ret = [0]*N
i = N-1
Q = []
while i >= 0:
    nowh = arr[i]
    heappush(Q, (arr[i], i))
    minh, mini = heappop(Q)
    while nowh > minh:
        ret[mini] = i+1
        minh, mini = heappop(Q)
    heappush(Q, (minh, mini))
    i -= 1

print(*ret)

heapq๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€๋‹ค. ๋†’์ด์˜ ์ตœ์†Ÿ๊ฐ’๊ณผ ์ธ๋ฑ์Šค๋ฅผ ํ•จ๊ป˜ ํŠœํ”Œ๋กœ ์ €์žฅํ•˜๊ณ , ์ด๋ฅผ heapq์— ๋„ฃ์–ด์„œ ๋’ค์—์„œ๋ถ€ํ„ฐ ์•ž์œผ๋กœ ๋†’์ด๋ฅผ ์ฒดํฌํ•œ๋‹ค. ์ฒดํฌ๋œ ํ˜„์žฌ ๋†’์ด๊ฐ€ heapq์— ์žˆ๋Š” ์ตœ์ € ๋†’์ด๋ณด๋‹ค ๋†’๋‹ค๋ฉด ํ•ด๋‹น ์ตœ์ € ๋†’์ด์˜ ์ธ๋ฑ์Šค์— ํ˜„์žฌ ์ธ๋ฑ์Šค๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค. ์ด ๊ณผ์ •์„ heaqp์—์„œ ๊บผ๋‚ธ ์ตœ์†Œ ๋†’์ด๊ฐ€ ํ˜„์žฌ ์ธ๋ฑ์Šค์˜ ๋†’์ด๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ๋†’์€ ๊ฒฝ์šฐ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!


๋ชจ๋ฒ”๋‹ต์•ˆ

์ถœ์ฒ˜

import sys 
input = sys.stdin.readline

n = int(input()) 
tower = list(map(int, input().split())) 
stack = [] 
sol = [0] * n 

for i in range(n):
    while stack and tower[stack[-1]] < tower[i]: 
        stack.pop() 
    if stack: 
        sol[i] = stack[-1] + 1 
    stack.append(i) 

print(' '.join(map(str,sol)))

stack์„ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์…จ๋‹ค. ์•ž์—์„œ๋ถ€ํ„ฐ ํƒ€์›Œ์˜ ์ธ๋ฑ์Šค๋ฅผ stack์— ์ฑ„์›Œ๋‚˜๊ฐ€์…จ๋Š”๋ฐ, stack์— ์ €์žฅ๋œ tower๊ฐ€ ์—†๋‹ค๋ฉด stack์— ํ˜„์žฌ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , stack์— ํƒ€์›Œ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ˜„์žฌ ํƒ€์›Œ์˜ ๋†’์ด๊ฐ€ stack์˜ ๋งˆ์ง€๋ง‰ ํƒ€์›Œ์˜ ๋†’์ด๋ณด๋‹ค ๋†’๋‹ค๋ฉด stack์˜ ์ธ๋ฑ์Šค๋ฅผ ๋นผ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค. ์ด์ „์— stack์— ๋„ฃ์—ˆ๋˜ ํ˜„์žฌ ์ธ๋ฑ์Šค์˜ ๋†’์ด๋ณด๋‹ค ๋‚ฎ์€ ํƒ€์›Œ๋“ค์€ ์ดํ›„์—๋„ ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋นผ๋ฒ„๋ ค๋„ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค.

๋งŒ์•ฝ stack์˜ ๋งˆ์ง€๋ง‰ ํƒ€์›Œ์˜ ๋†’์ด๊ฐ€ ํ˜„์žฌ ํƒ€์›Œ์˜ ๋†’์ด๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ํฌ๋‹ค๋ฉด ํ˜„์žฌ ํƒ€์›Œ์˜ ๋†’์ด๋ฅผ stack์˜ ๋งˆ์ง€๋ง‰ ํƒ€์›Œ์˜ ์ธ๋ฑ์Šค+1 ๋กœ ์ง€์ •ํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค.

๋‚˜๋„ heqpq์—์„œ ๋งค๋ฒˆ ๋ฒ„๋ฆฌ๋Š” ๋ฐฉ์‹์ด์ง€๋งŒ, ์ด ๋ฐฉ์‹์€ ์•ž์—์„œ ๋นผ๋ƒ„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  stack์˜ ํฌ๊ธฐ๋ฅผ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๋ฉฐ ๋ฐ˜๋ณต์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ์ข‹์€ ์ฝ”๋“œ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ