์•Œ๊ณ ๋ฆฌ์ฆ˜/์„ ํ˜•๊ตฌ์กฐ

[๋ฐฑ์ค€ 2493 ๐Ÿฅ‡] ํƒ‘

1eehyunji 2023. 8. 3. 23:24

๋ฌธ์ œ

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์„ ์ถœ๋ ฅํ•œ๋‹ค.

๋ฌธ์ œํ’€์ด

import sys

n=int(sys.stdin.readline())
top=list(map(int,sys.stdin.readline().strip().split(' ')))

ans=[0]*n
stack=[]

for i in range(1,n+1):
    cur=top[i-1]
    while stack and stack[-1][0]<cur:
        stack.pop()
    if stack:
        ans[i-1]=stack[-1][1]
    stack.append([cur, i])

for a in ans:
    print(a, end=' ')

 ์–ด์ œ ํ’€์—ˆ๋˜ ๋ฐฑ์ค€ 1863๋ฒˆ ์Šค์นด์ด๋ผ์ธ ์‰ฌ์šด ๊ฑฐ ๋ฌธ์ œ๋ž‘ ์•„์ด๋””์–ด๊ฐ€ ๋น„์Šทํ•ด์„œ ๋ฐ”๋กœ ํ’€์ด๋ฒ•์„ ์ƒ๊ฐํ•ด๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์™ผ์ชฝ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ์„ธ์›Œ์ ธ์žˆ๋˜ ํƒ‘๋“ค์„ ํƒ์ƒ‰ํ•˜๋ฉด์„œ for๋ฌธ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ์™ผ์ชฝ ํƒ‘๋“ค ์ค‘ ๋ ˆ์ด์ €๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํƒ‘์„ ํƒ์ƒ‰ํ–ˆ๋‹ค.

์Šคํƒ์˜ top์ด ๋ณ€์ˆ˜ cur์— ์ €์žฅ๋œ ํ˜„์žฌ ํƒ‘๋ณด๋‹ค ๋” ๋†’์•„์ง€๊ธฐ ์ „๊นŒ์ง€ ์Šคํƒ์—์„œ pop()์„ ํ•ด์ค€๋‹ค.

๋ชจ๋‘ popํ•ด์ค€ ๋’ค์— ์Šคํƒ์— ๋‚จ์€ ๊ฐ’์ด ์žˆ๋‹ค๋ฉด ํ˜„์žฌ ์Šคํƒ์— ์œ„์น˜ํ•œ ํƒ‘์ด ํ˜„์žฌ ํƒ‘์˜ ๋ ˆ์ด์ €๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํƒ‘์ด ๋˜๋ฏ€๋กœ

ans[ํ˜„์žฌ ํƒ‘ ๋ฒˆํ˜ธ]='์Šคํƒ์˜ ํƒ‘ ๋†’์ด'๋ฅผ ์ €์žฅํ•ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ ํƒ‘์„ ์Šคํƒ์— ํƒ‘ ๋ฒˆํ˜ธ์™€ ํ•จ๊ป˜ pushํ•œ๋‹ค.

์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๊ณ  ๋ชจ๋“  ํƒ‘์„ ํƒ์ƒ‰ํ•˜๊ณ  ๋‚˜์„œ ans์— ์ €์žฅ๋œ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๊ทธ๋ฆผ์œผ๋กœ ์„ค๋ช…ํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ฆ‰, ํ˜„์žฌ ํƒ‘ ๊ธฐ์ค€์œผ๋กœ ์ž์‹ ๋ณด๋‹ค ์™ผ์ชฝ์— ์žˆ๋Š” ํƒ‘๋“ค ์ค‘ ์ž์‹ ๋ณด๋‹ค ํฐ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํƒ‘์„ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค.