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

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

17298๋ฒˆ: ์˜คํฐ์ˆ˜

์ฒซ์งธ ์ค„์— ์ˆ˜์—ด A์˜ ํฌ๊ธฐ N (1 ≤ N ≤ 1,000,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ์— ์ˆ˜์—ด A์˜ ์›์†Œ A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)์ด ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 3 5 2 7์˜ ์ˆ˜์—ด์ด ์ฃผ์–ด์ง€๋ฉด, ํ•œ ์›์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฅธ์ชฝ์— ํฐ ๊ฐ’์ด ์žˆ์œผ๋ฉด ์ตœ์ดˆ์˜ ํฐ ๊ฐ’์„ ๊ธฐ๋กํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋งŒ์•ฝ ํฐ ๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ๋‹ค๋ฅธ stack์˜ ๋ฌธ์ œ์™€ ๋‹ฌ๋ฆฌ ์ˆ˜์—ด์˜ ๊ฐ’์„ stack์— ๋„ฃ๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๊ฐ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, ํŒŒ์ด์ฌ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ ์ฒ˜๋ฆฌ๋งˆ๋‹ค list๋ฅผ append ํ•  ๊ฒฝ์šฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ, ๋ฏธ๋ฆฌ list๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด๋‘๊ณ  ์ง„ํ–‰ํ•˜์—ฌ์•ผ ํ•œ๋‹ค.๐Ÿ™‚

 

  1. stack์— ์ธ๋ฑ์Šค 0๋ฒˆ๋ถ€ํ„ฐ ์ถ”๊ฐ€ํ•˜์—ฌ, ์šฐ์„  ๋ฐ”๋กœ ์˜† ์›์†Œ์™€ ๋น„๊ตํ•œ๋‹ค.
  2. 1์˜ ๊ณผ์ •์€ stack์˜ ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
  3. 2์˜ ๊ณผ์ •์ด ๋๋‚˜๋ฉด ๋‹ค์Œ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

1 - 3์˜ ๊ณผ์ •์„ 3 5 2 7๊ณผ ๊ฐ™์€ ์˜ˆ์‹œ๊ฐ€ ์ž…๋ ฅ๋  ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰๋œ๋‹ค.

  • 0๋ฒˆ ์ธ๋ฑ์Šค๋ฅผ stack์— ๋„ฃ๊ณ  ๋‹ค์Œ ์ธ๋ฑ์Šค์ธ 1๊ณผ ๋น„๊ตํ•˜๋‹ˆ ๊ฐ’์ด ํฌ๋ฏ€๋กœ ์ธ๋ฑ์Šค 0์˜ ๊ฐ’์„ 5๋กœ ๊ฐฑ์‹ ํ•˜๊ณ  ์ธ๋ฑ์Šค 0์„ stack์—์„œ pop ํ•œ๋‹ค.
  • 1๋ฒˆ ์ธ๋ฑ์Šค๋ฅผ stack์— ๋„ฃ๊ณ  ๋‹ค์Œ ์ธ๋ฑ์Šค์ธ 2์™€ ๋น„๊ตํ•˜๋‹ˆ ๊ฐ’์ด ํฌ์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฐฑ์‹ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • 2๋ฒˆ ์ธ๋ฑ์Šค๋ฅผ stack์— ๋„ฃ๊ณ  ๋‹ค์Œ ์ธ๋ฑ์Šค์ธ 3๊ณผ ๋น„๊ตํ•˜๋‹ˆ ๊ฐ’์ด ํฌ๋ฏ€๋กœ ์ธ๋ฑ์Šค 2์˜ ๊ฐ’์„ 7๋กœ ๊ฐฑ์‹ ํ•˜๊ณ  ์ธ๋ฑ์Šค 2๋ฅผ stack์—์„œ pop ํ•œ๋‹ค.
    • ์•„์ง stack์— 1๋ฒˆ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ์œผ๋‹ˆ ์ธ๋ฑ์Šค 1๊ณผ ๋‹ค์Œ ์ธ๋ฑ์Šค์ธ 3์„ ๋น„๊ตํ•˜๋‹ˆ ๊ฐ’์ด ํฌ๋ฏ€๋กœ ์ธ๋ฑ์Šค 1์˜ ๊ฐ’์„ 7๋กœ ๊ฐฑ์‹ ํ•˜๊ณ  ์ธ๋ฑ์Šค 1์„ stack์—์„œ pop ํ•œ๋‹ค.
  • ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์ธ 3๋ฒˆ ์ธ๋ฑ์Šค๋Š” ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

 

์ฝ”๋“œ

from sys import stdin

if __name__ == '__main__':
    n = int(stdin.readline())
    nums = list(map(int, stdin.readline().split()))
    stack = [0]
    answer = [-1] * n

    i = 1

    while i < n:
        while stack and nums[stack[-1]] < nums[i]:
            answer[stack[-1]] = nums[i]
            stack.pop()

        stack.append(i)
        i += 1

    for num in answer:
        print(num, end=' ')

 ๋ฌธ์ œ ํ’€์ด์—์„œ ์†Œ๊ฐœํ•œ ํ’€์ด ๋ฐฉ๋ฒ•์„ ๊ทธ๋Œ€๋กœ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•œ ๊ฒƒ์ด๋‹ค. answer๋ฅผ ๋ฏธ๋ฆฌ -1๋กœ ์ดˆ๊ธฐํ™”ํ•ด๋‘์–ด ๋ณ€๊ฒฝ์ด ์—†์„ ๊ฒฝ์šฐ ์ฒ˜๋ฆฌํ•  ํ•„์š” ์—†์ด ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค. ์›์†Œ๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉด์„œ stack์— ๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ ๊ฐ™์ด ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. (์ฑ„์  ์‹œ ์‹œ๊ฐ„์ด ์ƒ๋‹นํžˆ ์†Œ์š”๋œ๋‹ค.)

 

 

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