ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

2493๋ฒˆ: ํƒ‘

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

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 ์ขŒ์ธก์— ์žˆ๋Š” ํƒ‘์ด, ์šฐ์ธก์˜ ํƒ‘ ๋ณด๋‹ค ๋†’์ด๊ฐ€ ๋†’์€ ๊ฒฝ์šฐ์— ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ฒ˜์Œ์—๋Š” ์ž…๋ ฅ์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ›๊ณ  ๋’ค์ง‘์–ด์„œ ์ƒ๊ฐํ•ด์•ผ ํ• ๊นŒ ๊ณ ๋ฏผํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๊ฐ ํƒ‘์˜ ์ธ๋ฑ์Šค, ๋†’์ด๋ฅผ `stack`์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ์œ„ ๋ฌธ์ œ๋ฅผ ๊ฐ„๋‹จํžˆ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  • `stack`์— ํƒ‘์„ ์ˆœ์„œ๋Œ€๋กœ ์‚ฝ์ž…ํ•œ๋‹ค.
    • pop์„ ํ•˜๊ฒŒ ๋˜๋ฉด, ํ˜„์žฌ ํƒ‘์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐ”๋กœ ์ขŒ์ธก์˜ ํƒ‘๋ถ€ํ„ฐ ๋น„๊ต๋ฅผ ์‹œ์ž‘ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ˜„์žฌ ํƒ€์›Œ์™€ ๋น„๊ตํ•˜์—ฌ `stack`์•ˆ์˜ ํƒ€์›Œ๋“ค(์ขŒ์ธก์˜ ํƒ€์›Œ๋“ค)๊ณผ ๋น„๊ตํ•˜์—ฌ, ๋†’์ด๊ฐ€ ๋‚ฎ๋‹ค๋ฉด ์ œ๊ฑฐํ•œ๋‹ค.
    • ํ˜„์žฌ ํƒ€์›Œ๋ณด๋‹ค ๋†’์ด๊ฐ€ ๋‚ฎ๋‹ค๋ฉด ํ•„์š” ์—†๋Š” ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ์œ„์˜ ๊ฐ’์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋ฉด, ์›ํ•˜๋Š” ๋‹ต์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

์ฝ”๋“œ

from sys import stdin

IDX, HEIGHT = 0, 1

if __name__ == "__main__":
    N = int(stdin.readline())
    tower = list(map(int, stdin.readline().split()))
    stack = []
    answer = [0 for _ in range(N)]

    for idx, height in enumerate(tower):
        while stack:
            if stack[-1][HEIGHT] > height:
                answer[idx] = stack[-1][IDX] + 1
                break
            else:
                stack.pop()

        stack.append((idx, height))

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

 

 

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€