Algorithm Problem/Python

[python] ๋ฐฑ์ค€ - 2493. ํƒ‘

deo2kim 2020. 11. 25. 10:09
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

  • G4 | ์ž๋ฃŒ๊ตฌ์กฐ, ์Šคํƒ

๋ฌธ์ œ๋ฅผ ํ‘ผ ๋’ค ๋ฌธ์ œ ์œ ํ˜•์„ ๋ดค๋Š”๋ฐ ์Šคํƒ์ด๋ผ๊ณ  ๋˜์–ด์žˆ์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋‚ด ํ’€์ด๋Š” ์Šคํƒ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋ณด๋‹ค ํšจ์œจ์ด ์ข‹๊ฒŒ ๋‚˜์™”๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ‰๊ท ์ธ๋“ฏ.

 

ํ’€์ด ๋ฐฉ๋ฒ•

1๋ฒˆํƒ‘๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ํƒ‘ ์ˆœ์œผ๋กœ ํƒ์ƒ‰ํ–ˆ๋‹ค.

  • ํ˜„์žฌํƒ‘๊ณผ ์ด์ „ํƒ‘๊ณผ ๊ฐ™์„ ๋•Œ
    • ํ˜„์žฌํƒ‘์˜ ๋ ˆ์ด์ € ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ํƒ‘์€ ์ด์ „ํƒ‘์˜ ๋ ˆ์ด์ € ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ํƒ‘๊ณผ ๊ฐ™๋‹ค.
  • ํ˜„์žฌํƒ‘์ด ์ด์ „ํƒ‘๋ณด๋‹ค ๋‚ฎ์„ ๋•Œ
    • ํ˜„์žฌํƒ‘์˜ ๋ ˆ์ด์ € ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ํƒ‘์€ ์ด์ „ํƒ‘์ด๋‹ค.
  • ํ˜„์žฌํƒ‘์ด ์ด์ „ํƒ‘๋ณด๋‹ค ๋†’์„ ๋•Œ ๐Ÿฑ‍๐Ÿ‰
    • ์ด์ „ํƒ‘์˜ ๋ ˆ์ด์ € ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•œ ํƒ‘์œผ๋กœ ๊ฑด๋„ˆ ๋›ด๋‹ค.
    • ๊ทธ ํƒ‘์„ ์œ„์˜ 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ฒดํฌํ•œ๋‹ค.
    • ์•„์ง ํ˜„์žฌํƒ‘์ด ๋†’์€ ์ƒํƒœ๋ผ๋ฉด ๋˜ ๊ทธ ํƒ‘์˜ ๋ ˆ์ด์ € ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•œ ํƒ‘์œผ๋กœ ๊ฑด๋„ˆ ๋›ด๋‹ค.

์ด๋ ‡๊ฒŒ 3๊ฐ€์ง€๋กœ ๋ถ„๋ฆฌํ–ˆ๋‹ค.

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

 if __name__ == '__main__':
    N = int(input())
    TOP = list(map(int, input().split()))
    answer = [0] * N

    for i in range(1, N):
        j = i - 1
        while j >= 0:
            if TOP[i] == TOP[j]:  # ์ด์ „๊ณผ ๊ฐ™์„ ๋•Œ
                answer[i] = answer[j]
                break
            elif TOP[i] > TOP[j]:  # ์ด์ „๋ณด๋‹ค ๋†’์„ ๋•Œ
                j = answer[j] - 1
            else:  # ์ด์ „๋ณด๋‹ค ๋‚ฎ์„ ๋•Œ
                answer[i] = j + 1
                break

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

 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

์ถœ์ฒ˜: BACKJOON ONLINE JUDGE

๋งํฌ: https://www.acmicpc.net/problem/2493

 

2493๋ฒˆ: ํƒ‘

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

www.acmicpc.net

 

๋ฐ˜์‘ํ˜•