ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] ๋ฐฑ์ค€ 1966 ํ”„๋ฆฐํ„ฐ ํ (Deque)
    ๐Ÿ’ป Algorithm/Python 2022. 7. 2. 13:53

     

    ๐Ÿ“Œ ๋ฌธ์ œ

    ์—ฌ๋Ÿฌ๋ถ„๋„ ์•Œ๋‹ค์‹œํ”ผ ์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋ฆฐํ„ฐ ๊ธฐ๊ธฐ๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ์ธ์‡„ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์ธ์‡„ ๋ช…๋ น์„ ๋ฐ›์€ ‘์ˆœ์„œ๋Œ€๋กœ’, ์ฆ‰ ๋จผ์ € ์š”์ฒญ๋œ ๊ฒƒ์„ ๋จผ์ € ์ธ์‡„ํ•œ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์„œ๊ฐ€ ์Œ“์ธ๋‹ค๋ฉด Queue ์ž๋ฃŒ๊ตฌ์กฐ์— ์Œ“์—ฌ์„œ FIFO - First In First Out - ์— ๋”ฐ๋ผ ์ธ์‡„๊ฐ€ ๋˜๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ƒ๊ทผ์ด๋Š” ์ƒˆ๋กœ์šด ํ”„๋ฆฐํ„ฐ๊ธฐ ๋‚ด๋ถ€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜์˜€๋Š”๋ฐ, ์ด ํ”„๋ฆฐํ„ฐ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ธ์‡„๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค.

     

    • ํ˜„์žฌ Queue์˜ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๋ฌธ์„œ์˜ ‘์ค‘์š”๋„’๋ฅผ ํ™•์ธํ•œ๋‹ค.
    • ๋‚˜๋จธ์ง€ ๋ฌธ์„œ๋“ค ์ค‘ ํ˜„์žฌ ๋ฌธ์„œ๋ณด๋‹ค ์ค‘์š”๋„๊ฐ€ ๋†’์€ ๋ฌธ์„œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ๋‹ค๋ฉด, ์ด ๋ฌธ์„œ๋ฅผ ์ธ์‡„ํ•˜์ง€ ์•Š๊ณ  Queue์˜ ๊ฐ€์žฅ ๋’ค์— ์žฌ๋ฐฐ์น˜ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋ฐ”๋กœ ์ธ์‡„๋ฅผ ํ•œ๋‹ค.

     

    ์˜ˆ๋ฅผ ๋“ค์–ด Queue์— 4๊ฐœ์˜ ๋ฌธ์„œ(A B C D)๊ฐ€ ์žˆ๊ณ , ์ค‘์š”๋„๊ฐ€ 2 1 4 3 ๋ผ๋ฉด C๋ฅผ ์ธ์‡„ํ•˜๊ณ , ๋‹ค์Œ์œผ๋กœ D๋ฅผ ์ธ์‡„ํ•˜๊ณ  A, B๋ฅผ ์ธ์‡„ํ•˜๊ฒŒ ๋œ๋‹ค.

     

    ์—ฌ๋Ÿฌ๋ถ„์ด ํ•  ์ผ์€, ํ˜„์žฌ Queue์— ์žˆ๋Š” ๋ฌธ์„œ์˜ ์ˆ˜์™€ ์ค‘์š”๋„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์–ด๋–ค ํ•œ ๋ฌธ์„œ๊ฐ€ ๋ช‡ ๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜๋Š”์ง€ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์œ„์˜ ์˜ˆ์—์„œ C๋ฌธ์„œ๋Š” 1๋ฒˆ์งธ๋กœ, A๋ฌธ์„œ๋Š” 3๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜๊ฒŒ ๋œ๋‹ค.

    ์ž…๋ ฅ

    ์ฒซ ์ค„์— ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋Š” ๋‘ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

     

    ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ๋ฌธ์„œ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 100)๊ณผ, ๋ช‡ ๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜์—ˆ๋Š”์ง€ ๊ถ๊ธˆํ•œ ๋ฌธ์„œ๊ฐ€ ํ˜„์žฌ Queue์—์„œ ๋ช‡ ๋ฒˆ์งธ์— ๋†“์—ฌ ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ M(0 ≤ M < N)์ด ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ ๋งจ ์™ผ์ชฝ์€ 0๋ฒˆ์งธ๋ผ๊ณ  ํ•˜์ž. ๋‘ ๋ฒˆ์งธ ์ค„์—๋Š” N๊ฐœ ๋ฌธ์„œ์˜ ์ค‘์š”๋„๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ค‘์š”๋„๋Š” 1 ์ด์ƒ 9 ์ดํ•˜์˜ ์ •์ˆ˜์ด๊ณ , ์ค‘์š”๋„๊ฐ€ ๊ฐ™์€ ๋ฌธ์„œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค.

    ์ถœ๋ ฅ

    ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด ๋ฌธ์„œ๊ฐ€ ๋ช‡ ๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

    ์˜ˆ์ œ ์ž…๋ ฅ

    3
    1 0
    5
    4 2
    1 2 3 4
    6 0
    1 1 9 1 1 1

     

    ๋ฒˆ์—ญ์ด ์ฉ ๋งค๋„๋Ÿฝ์ง€ ์•Š์•„์„œ ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ๊ทธ๋ฆผ์„ ๊ทธ๋ ค๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์šฐ์„ ์ˆœ์œ„ ํ์— ๋”ฐ๋ฅด๋ฉด ๋นจ๊ฐ„ ์ƒ‰์ด ๋ช‡ ๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜๋Š”์ง€ ๊ตฌํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

     

    ์˜ˆ์ œ ์ถœ๋ ฅ

    1
    2
    5

     


     

    ๐Ÿ“Œ ํ’€์ด

    ์ฝ”๋“œ

    import sys
    from collections import deque
    input = sys.stdin.readline
    
    tc = int(input())
    
    for _ in range(tc):
        n, idx = map(int, input().split())
        q = deque(map(int, input().split()))
        idxq = deque(range(0, n))
    
        cnt = 0
    
        while q:
            if q[0] == max(q):
                cnt += 1
                q.popleft()
                if idxq.popleft() == idx:
                    print(cnt)
                    break
            else:
                q.rotate(-1)
                idxq.rotate(-1)

    ์ž๋ฃŒ๊ตฌ์กฐ ์„ค๋ช…

    q.append(q.popleft()) ์—ญํ• ์„ q.rotate(-1)๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. rotate(-1)์€ ์›ํ˜• ํ๊ฐ€ ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ 1์นธ ํšŒ์ „ํ•˜๊ณ , rotate(1)์€ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ 1์นธ ํšŒ์ „ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ rotate(-1)์„ ํ•˜๋ฉด ๋งจ ์•ž์˜ ๊ฒƒ์„ popํ•ด์„œ ๋งจ ๋’ค๋กœ pushํ•˜๋Š” ํ˜•ํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

     


    ๋ฌธ์ œ์—์„œ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ ‡๊ฒŒ ํ•œ๋‹ค๋ฉด ๋ณธ๋ž˜ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ๋‹ด๊ฒจ ์žˆ๋˜ ๊ฐ’์ด ๋ฌด์—‡์ด์—ˆ๋Š”์ง€ ์žƒ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋ฌป๋Š” ๊ฒƒ์€ '์ดˆ๊ธฐ ์ƒํƒœ์˜ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ๋‹ด๊ฒจ ์žˆ๋˜ ๊ฒƒ์ด ๋ช‡ ๋ฒˆ์งธ๋กœ pop๋˜๋Š”์ง€'์ด๋ฏ€๋กœ, rotate๋  ๋•Œ ์ดˆ๊ธฐ ์ƒํƒœ์˜ ์ธ๋ฑ์Šค ์ •๋ณด๋ฅผ ์žƒ์œผ๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

     


    ๋”ฐ๋ผ์„œ ์ธ๋ฑ์Šค ์ •๋ณด๋ฅผ ๋‹ด์€ deque๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. idxq = deque(range(0, n))์œผ๋กœ! q์˜ ์ธ๋ฑ์Šค๊ฐ€ idxq์˜ ๊ฐ’์ด ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. q๊ฐ€ rotate๋  ๋•Œ idxq๋„ rotate์‹œํ‚ด์œผ๋กœ์จ ์ดˆ๊ธฐ ์ƒํƒœ์˜ ์ธ๋ฑ์Šค์™€ ๊ฐ’์ด ํ•จ๊ป˜ ์ด๋™ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.


    ๋™์ž‘๋ฐฉ์‹ ์„ค๋ช…

    ํ์˜ ๋งจ ์•ž์— ์žˆ๋Š” ๊ฐ’์ด ํ˜„์žฌ ํ์—์„œ ๊ฐ€์žฅ ํด ๋•Œ pop๋˜๋ฏ€๋กœ, q[0]๊ณผ max(q)๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

     

    ๊ฐ™๋‹ค๋ฉด pop๊ฐฏ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” cnt๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚ค๊ณ  popํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  idxq์—์„œ๋„ ๊ฐ™์ด popํ•˜๊ณ , ์ด๋•Œ ์ด pop๋œ ๊ฐ’์ด ์šฐ๋ฆฌ๊ฐ€ ์ฃผ์‹œํ•˜๊ณ  ์žˆ๋Š” ์ธ๋ฑ์Šค์™€ ๊ฐ™๋‹ค๋ฉด ์‹คํ–‰์„ ๋๋‚ด๋ฉฐ ๋ช‡๋ฒˆ์งธ๋กœ pop๋œ๊ฑด์ง€ cnt๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

     

    ๋‹ค๋ฅด๋ฉด ํ๋ฅผ rotate(-1)์‹œํ‚ต๋‹ˆ๋‹ค.

     

    ์‹คํ–‰ ์ˆœ์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    > 1
      6 0
      1 1 9 1 1 1
      
    [1, 1, 9, 1, 1, 1]
    [1, 9, 1, 1, 1, 1]
    [9, 1, 1, 1, 1, 1]
    [1, 1, 1, 1, 1]
    [1, 1, 1, 1]
    [1, 1, 1]
    [1, 1]
    break
    > 1
      4 2
      1 2 3 4
      
    [1, 2, 3, 4]
    [2, 3, 4, 1]
    [3, 4, 1, 2]
    [4, 1, 2, 3]
    [1, 2, 3]
    [2, 3, 1]
    [3, 1, 2]
    break
     

    ๋Œ“๊ธ€

Designed by Tistory.