[백준] 1021번 회전하는 큐

거북이·2023년 1월 15일
0

백준[실버4]

목록 보기
57/91
post-thumbnail

💡문제접근

  • 지민이가 뽑아내고자 하는 수의 위치를 중간 지점 위치를 기준으로 왼쪽에 있으면 왼쪽으로 한 칸 이동시키는 ②번 과정을 수행하고 만약 오른쪽에 있으면 오른쪽으로 한 칸 이동시키는 ③번 과정을 수행한다. 뽑아내고자 하는 수의 위치가 맨 처음에 위치하면 해당하는 수를 제거하고 다음 뽑아내고자 하는 수로 넘어간다.

💡코드(메모리 : 34100KB, 시간 : 76ms)

from collections import deque

data = deque([])
N, M = map(int, input().split())
for i in range(N):
    data.append(i + 1)

li = list(map(int, input().split()))

cnt = 0
for i in li:
    while True:
        t = data.index(i)
        mid = len(data) // 2
        if t == 0:
            data.remove(i)
            break
        if t <= mid:
            temp = data.popleft()
            data.append(temp)
            cnt += 1
        else:
            temp = data.pop()
            data.appendleft(temp)
            cnt += 1
print(cnt)

📌 deque(덱)의 rotate 메소드 : 덱의 회전을 고려한 메소드

a = deque([1, 2, 3, 4, 5])
print(a)

a.rotate(1) # 오른쪽으로 이동
print(a)

a.rotate(-1) # 왼쪽으로 이동
print(a)

# 출력
deque([1, 2, 3, 4, 5])
deque([5, 1, 2, 3, 4])
deque([1, 2, 3, 4, 5])

💡소요시간 : 38m

0개의 댓글