[Python] Queue - [백준 1012] 회전하는 큐

SSO·2023년 7월 26일
0

Coding Test & Algorithm

목록 보기
10/17

요즘 풀고있는 스텝은 Queue이다!
그 중에서도 오늘은 백준의 [회전하는 큐]라는 문제를 풀다가 알게 된 내용을 정리해보려고 한다.

[백준 1012] 회전하는 큐

문제를 풀기 위한 방법을 생각하는 건 어렵지 않았다.

내가 생각한 방법
1. 찾고자 하는 원소를 처음 갖는 큐의 첫 번째 원소와 비교를 해본다.
2. 첫 번째 원소와 같다면 바로 출력한다.
3. 아니라면 중앙을 기준으로 찾고자 하는 원소가 오른쪽으로 있는지 혹은 왼쪽으로 있는지 판단한다.
4. 오른쪽에 있다면 오른쪽으로 큐를 회전시키고 카운트를 증가시킨다.
5. 왼쪽에 있다면 왼쪽으로 큐를 회전시키고 카운트를 증가시킨다.
6. 회전을 시키다가 찾고자 하는 원소가 큐의 첫 번째로 오면 출력한다.

위와 같은 과정으로 코드를 작성하는 것도 어렵지 않았다.

import sys
from collections import deque

N, M = map(int, sys.stdin.readline().split())
find = deque(map(int, sys.stdin.readline().split()))
queue = deque()

for i in range(1, N + 1):
    queue.append(i)

cnt = 0

for i in find:
    while True:
        if queue[0] == i:
            queue.popleft()
            break
        else:
            if queue.index(i) <= len(queue) / 2:
                queue.append(queue.popleft())
                cnt += 1
            else:
                queue.appendleft(queue.pop())
                cnt += 1

print(cnt)

위의 코드를 살펴보면 회전을 시키기 위해서 queue.append(queue.popleft())를 해주거나 queue.appendleft(queue.pop())을 사용한 것을 볼 수 있다.

코드를 다 작성한 후 다른 사람들의 풀이를 보기 위해 살펴보니 저렇게 길게 작성하지 않고 deque의 메서드 중 rotate라는 메서드를 사용하면 쉽게 할 수 있었다.

💡 사용 방법

rotate(n)

  1. n이 양수일 경우

원소를 오른쪽으로 회전

from collections import deque

queue = deque([i for i in range(1, 11)])  => 기존 큐: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
queue.rotate(1)  => 10, 1, 2, 3, 4, 5, 6, 7, 8, 9 

  1. n이 음수일 경우

원소를 왼쪽으로 회전

from collections import deque

queue = deque([i for i in range(1, 11)])  => 기존 큐: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
queue.rotate(-1)  => 2, 3, 4, 5, 6, 7, 8, 9, 10, 1 

처음에는 큐의 인덱스를 가지는 리스트를 따로 만들어야 하나 복잡하게 생각했었는데 단순히 rotate를 사용했으면 더 간단하게 빨리 풀 수 있었을 거 같다!
다음에 비슷한 문제를 만나면 사용해봐야겠다🧐

profile
👩🏻‍💻👊🏻⭐️

0개의 댓글