์•Œ๊ณ ๋ฆฌ์ฆ˜ ๐Ÿ”ฅ/๋ฐฑ์ค€

๋ฐฑ์ค€ 2493๋ฒˆ : ํƒ‘(G5)

23.8 2024. 1. 4. 16:52
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/2493

 

2493๋ฒˆ: ํƒ‘

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

www.acmicpc.net

 

โœจ ๋ฌธ์ œ

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 ์ดํ•˜์˜ ์ •์ˆ˜์ด๋‹ค.

 

์ž…๋ ฅ ์กฐ๊ฑด์—์„œ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ N์ด 100,000์ด๋ผ๊ณ  ํ•˜๋”๋ผ๋„ ์ด๋Š” 10์˜ 6์Šน์ด๋‹ค. ๋ณดํ†ต ์‹œ๊ฐ„๋ณต์žก๋„์— N์„ ๋Œ€์ž…ํ•˜์˜€์„ ๋•Œ ๊ทธ ๊ฒฐ๊ณผ๊ฐ’์ด ์˜ 8์Šน์„ ๋„˜์œผ๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์ด ๋ฌธ์ œ์—์„œ๋Š” ์ด์ค‘ for ๋ฌธ์„ ์“ฐ๋ฉด ์•ˆ๋œ๋‹ค. 

 

์‚ฌ์‹ค ํ•œ์ฐธ์„ ํ—ค๋งค๋‹ค๊ฐ€ ๊ฒฐ๊ตญ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ stack์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค. ๋‹ค๋งŒ ๊ฐ„๊ณผํ–ˆ๋˜ ๊ฒƒ์€ stack์— ๋ฆฌ์ŠคํŠธ๋ฅผ appendํ•˜์—ฌ ์ด์ค‘ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ ๋‹ค๋Š” ๊ฒƒ.

 

์ด ๋ฌธ์ œ์—์„œ๋Š” ์ตœ๋Œ€๊ฐ’์„ stack์— ์ €์žฅํ•ด๋‘๊ณ  test case๋กœ ๋ฐ›์€ ๊ฐ’๊ณผ ๋น„๊ตํ•ด๊ฐ€๋ฉฐ answer์— ์ •๋‹ต์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

 

์šฐ์„  stack๊ณผ answer ๋‘ ๊ฐœ์˜ ๋นˆ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ , N๋งŒํผ for๋ฌธ์„ ๋Œ๋ฉด์„œ stack์ด ๋น„์–ด์žˆ๋‹ค๋ฉด ๋‚˜์˜ ์™ผ์ชฝ ๊ธฐ์ค€ ๋‚˜๋ณด๋‹ค ํฐ ๊ฐ’์ด ์—†๋‹ค๋Š” ๊ฒƒ์„ ๋œป ํ•˜๋ฏ€๋กœ answer ๋ฐฐ์—ด์—๋Š” 0์„,  stack์—๋Š” case ๋ฐฐ์—ด์˜ i ๋ฒˆ์งธ ๊ฐ’์„ [index, value] ํ˜•์‹์œผ๋กœ append ํ•ด์ค€๋‹ค. ๋งŒ์•ฝ stack์— ๊ฐ’์ด ์žˆ๋‹ค๋ฉด stack์•ˆ์— ์žˆ๋Š” ๋ฐฐ์—ด์˜ index์™€ valuee ์ค‘ value๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ๋น„๊ตํ•˜๊ณ ์ž ํ•˜๋Š” case์˜ ๊ฐ’๋ณด๋‹ค ํฐ์ง€ ํ™•์ธํ•œ๋‹ค. ๋งŒ์•ฝ stack์— ์žˆ๋˜ ๊ฐ’์ด ๋” ํฌ๋‹ค๋ฉด ํ•ด๋‹น ๊ฐ’์˜ ์ธ๋ฑ์Šค๊ฐ€ answer์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. ๋งŒ์•ฝ์— stack์— ๊ฐ’์ด ์žˆ์ง€๋งŒ stack์•ˆ์— ์žˆ๋Š” ๊ฐ’๋ณด๋‹ค case ๋ฐฐ์—ด์— ์žˆ๋Š” ๊ฐ’์ด ํฌ๋‹ค๋ฉด ๋ ˆ์ด์ €๊ฐ€ ๋‹ฟ์„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ stack์— ์žˆ๋Š” ๊ฐ’์„ popํ•ด๊ฐ€๋ฉฐ ๊ฐ’์„ ๋น„๊ตํ•ด์ค€๋‹ค.

 

์ถ”๊ฐ€๋กœ ์˜ˆ์ „์— ๋ณด์•˜๋˜ https://leetcode.com/problems/daily-temperatures/ ๋ฌธ์ œ์™€ ๋น„์Šทํ•˜๋‹ค๊ณ  ๋Š๊ปด์„œ ํ•จ๊ป˜ ํ’€์–ด๋ณด๋ฉด ์ข‹์„ ๊ฑฐ ๊ฐ™๋‹ค. 

 

 

โœจ ์ฝ”๋“œ

N = int(input())
case = list(map(int, input().split()))

stack = []
answer = []

for i in range (N) :
    while stack:
        if stack[-1][1] > case[i] :
            answer.append(stack[-1][0]+1)
            break
        else :
            stack.pop()
        
    if not stack :
        answer.append(0)

    stack.append([i, case[i]])

print(*answer)
728x90
๋ฐ˜์‘ํ˜•