ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] ๋ฐฑ์ค€ 2346 ํ’์„  ํ„ฐ๋œจ๋ฆฌ๊ธฐ (Deque)
    ๐Ÿ’ป Algorithm/Python 2022. 7. 2. 15:07

     

    ๐Ÿ“Œ ๋ฌธ์ œ

    1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€ N๊ฐœ์˜ ํ’์„ ์ด ์›ํ˜•์œผ๋กœ ๋†“์—ฌ ์žˆ๊ณ . i๋ฒˆ ํ’์„ ์˜ ์˜ค๋ฅธ์ชฝ์—๋Š” i+1๋ฒˆ ํ’์„ ์ด ์žˆ๊ณ , ์™ผ์ชฝ์—๋Š” i-1๋ฒˆ ํ’์„ ์ด ์žˆ๋‹ค. ๋‹จ, 1๋ฒˆ ํ’์„ ์˜ ์™ผ์ชฝ์— N๋ฒˆ ํ’์„ ์ด ์žˆ๊ณ , N๋ฒˆ ํ’์„ ์˜ ์˜ค๋ฅธ์ชฝ์— 1๋ฒˆ ํ’์„ ์ด ์žˆ๋‹ค. ๊ฐ ํ’์„  ์•ˆ์—๋Š” ์ข…์ด๊ฐ€ ํ•˜๋‚˜ ๋“ค์–ด์žˆ๊ณ , ์ข…์ด์—๋Š” -N๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , N๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์ ํ˜€์žˆ๋‹ค. ์ด ํ’์„ ๋“ค์„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์œผ๋กœ ํ„ฐ๋œจ๋ฆฐ๋‹ค.

     

    ์šฐ์„ , ์ œ์ผ ์ฒ˜์Œ์—๋Š” 1๋ฒˆ ํ’์„ ์„ ํ„ฐ๋œจ๋ฆฐ๋‹ค. ๋‹ค์Œ์—๋Š” ํ’์„  ์•ˆ์— ์žˆ๋Š” ์ข…์ด๋ฅผ ๊บผ๋‚ด์–ด ๊ทธ ์ข…์ด์— ์ ํ˜€์žˆ๋Š” ๊ฐ’๋งŒํผ ์ด๋™ํ•˜์—ฌ ๋‹ค์Œ ํ’์„ ์„ ํ„ฐ๋œจ๋ฆฐ๋‹ค. ์–‘์ˆ˜๊ฐ€ ์ ํ˜€ ์žˆ์„ ๊ฒฝ์šฐ์—๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ, ์Œ์ˆ˜๊ฐ€ ์ ํ˜€ ์žˆ์„ ๋•Œ๋Š” ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•œ๋‹ค. ์ด๋™ํ•  ๋•Œ์—๋Š” ์ด๋ฏธ ํ„ฐ์ง„ ํ’์„ ์€ ๋นผ๊ณ  ์ด๋™ํ•œ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์„ฏ ๊ฐœ์˜ ํ’์„  ์•ˆ์— ์ฐจ๋ก€๋กœ 3, 2, 1, -3, -1์ด ์ ํ˜€ ์žˆ์—ˆ๋‹ค๊ณ  ํ•˜์ž. ์ด ๊ฒฝ์šฐ 3์ด ์ ํ˜€ ์žˆ๋Š” 1๋ฒˆ ํ’์„ , -3์ด ์ ํ˜€ ์žˆ๋Š” 4๋ฒˆ ํ’์„ , -1์ด ์ ํ˜€ ์žˆ๋Š” 5๋ฒˆ ํ’์„ , 1์ด ์ ํ˜€ ์žˆ๋Š” 3๋ฒˆ ํ’์„ , 2๊ฐ€ ์ ํ˜€ ์žˆ๋Š” 2๋ฒˆ ํ’์„ ์˜ ์ˆœ์„œ๋Œ€๋กœ ํ„ฐ์ง€๊ฒŒ ๋œ๋‹ค.

    ์ž…๋ ฅ

    ์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ N(1 ≤ N ≤ 1,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ ์ค„์—๋Š” ์ฐจ๋ก€๋กœ ๊ฐ ํ’์„  ์•ˆ์˜ ์ข…์ด์— ์ ํ˜€ ์žˆ๋Š” ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ข…์ด์— 0์€ ์ ํ˜€์žˆ์ง€ ์•Š๋‹ค.

    ์ถœ๋ ฅ

    ์ฒซ์งธ ์ค„์— ํ„ฐ์ง„ ํ’์„ ์˜ ๋ฒˆํ˜ธ๋ฅผ ์ฐจ๋ก€๋กœ ๋‚˜์—ดํ•œ๋‹ค.

    ์˜ˆ์ œ ์ž…๋ ฅ 1

    5
    3 2 1 -3 -1

    ์˜ˆ์ œ ์ถœ๋ ฅ 1

    1 4 5 3 2

     


     

    ๐Ÿ“Œ ํ’€์ด

    import sys
    from collections import deque
    input = sys.stdin.readline
    
    n = int(input())
    q = deque(enumerate(map(int, input().split())))
    ans = []
    
    while q:
        idx, paper = q.popleft()
        ans.append(idx + 1)
    
        if paper > 0:
            q.rotate(-(paper - 1))
        elif paper < 0:
            q.rotate(-paper)
    
    print(' '.join(map(str, ans)))

    enumerate

    ํ„ฐ์ง„ ํ’์„ ์˜ '๋ฒˆํ˜ธ(์ธ๋ฑ์Šค+1)'๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ด๋ฏ€๋กœ pop์„ ํ•˜๋”๋ผ๋„ ์ดˆ๊ธฐ ์ธ๋ฑ์Šค ์ •๋ณด๋Š” ๋๊นŒ์ง€ ์œ ์ง€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด enumerate๊ฐ€ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. enumerate ์‚ฌ์šฉ ์ „๊ณผ ํ›„์˜ ๋ฑ ์ƒํƒœ๋ฅผ ๋น„๊ตํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

     

    • enumerate ์‚ฌ์šฉ ์ „
      deque([3, 2, 1, -3, -1])
    • enumerate ์‚ฌ์šฉ ํ›„
      deque([(0, 3), (1, 2), (2, 1), (3, -3), (4, -1)])

     

    ๋ฑ์— ์ธ๋ฑ์Šค์™€ ์ข…์ด ๊ฐ’์ด ํŠœํ”Œ๋กœ ๋ฌถ์—ฌ์„œ ํ•˜๋‚˜์˜ ์›์†Œ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
    ๋”ฐ๋ผ์„œ idx, paper = q.popleft()๋ฅผ ํ•˜๋ฉด idx์—๋Š” 0์ด, paper์—๋Š” 3์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

     

    deque.rotate()

    rotate(-1)์€ ์›ํ˜• ํ๋ฅผ ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ 1์นธ ํšŒ์ „์‹œํ‚ค๊ณ , rotate(1)์€ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ 1์นธ ํšŒ์ „์‹œํ‚จ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ์Šต๋‹ˆ๋‹ค.

     

    ํ˜„์žฌ ๋ฌธ์ œ๋Š” ์›ํ˜•์œผ๋กœ ๋†“์—ฌ ์žˆ๋Š” ํ’์„ ์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๊ณ , ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•˜๋ฏ€๋กœ deque.rotate()๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋”ฑ ์ข‹์€ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

    ์ด์ œ paper๊ฐ€ ์–‘์ˆ˜์ธ์ง€ ์Œ์ˆ˜์ธ์ง€์— ๋”ฐ๋ผ ํšŒ์ „ ๋ฐฉํ–ฅ๊ณผ ์นธ์ˆ˜๋งŒ ์ •ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ๊ทธ๋ฆผ์„ ๊ทธ๋ ค๋ณด์•˜์Šต๋‹ˆ๋‹ค.

    • ๋นจ๊ฐ•: ํ˜„์žฌ ๋ฑ์˜ ๊ฐ€์žฅ ์•ž์ชฝ์— ์œ„์น˜ํ•œ ์›์†Œ(popํ•  ๋Œ€์ƒ)
    • ํŒŒ๋ž‘: ์ด๋™ํ•ด์•ผ ํ•  ๊ณณ

     


    paper > 0: ๋ฑ์„ ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „์‹œ์ผœ ํ•ด๋‹น ํ’์„ ์ด pop ๋Œ€์ƒ์ด ๋˜๋„๋ก ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    → ๊ทธ๋Ÿฐ๋ฐ ์ด๋ฏธ ํ˜„์žฌ ํ’์„ ์„ popํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์™ผ์ชฝ์œผ๋กœ 1์นธ์”ฉ ํšŒ์ „๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํšŒ์ „ํ•  ๋•Œ paper-1์นธ๋งŒํผ๋งŒ ํšŒ์ „์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    paper < 0: ๋ฑ์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํšŒ์ „์‹œ์ผœ ํ•ด๋‹น ํ’์„ ์ด pop ๋Œ€์ƒ์ด ๋˜๋„๋ก ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    → ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ˜„์žฌ ํ’์„ ์ด pop๋˜์–ด์„œ ์™ผ์ชฝ์œผ๋กœ 1์นธ์”ฉ ํšŒ์ „๋œ ์ƒํƒœ์ด์ง€๋งŒ, ์šฐ๋ฆฌ๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํšŒ์ „ํ•  ๊ฒƒ์ด๋ฏ€๋กœ ํšŒ์ „์นธ์ˆ˜์—๋Š” ์˜ํ–ฅ์ด ์—†์Šต๋‹ˆ๋‹ค.

     

    popํ•  ๋•Œ๋งˆ๋‹ค idx+1์„ ์ •๋‹ต๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๋Œ“๊ธ€

Designed by Tistory.