여니의 취준 준비/코딩테스트 (Python)

[n1021] 회전하는 큐 in python

여니's 2021. 10. 13. 15:17


덱을 이용해서 양방향 배열 구현하기

 

연산의 종류 3가지

1. 첫 번째 배열 원소 빼내기

2. 왼쪽으로 배열 이동

3. 오른쪽으로 배열 이동

while i != array[0]:
  array.appendleft(array.pop())
  cnt += 1
array.popleft()

while문이 끝난 뒤

array.popleft()를 붙여주지 않아서

한동안 헤맸다!

 

문제 풀기 전에

미리 설계를 해두고

코드를 짜는 습관을 들여보자 :).. 

from collections import deque

n, m = map(int, input().split())
array = deque([i for i in range(1, n + 1)])
location = list(map(int, input().split()))

cnt = 0

for i in location:
    if i == array[0]:  # 1번 연산
        array.popleft()
        continue
    else:  # 2번,3번 연산
        if array.index(i) > len(array) // 2:  # 왼쪽으로 이동
            while i != array[0]:
                array.appendleft(array.pop())
                cnt += 1
            array.popleft()
        else:
            while i != array[0]:
                array.append(array.popleft())
                cnt += 1
            array.popleft()
print(cnt)