[백준] 1021번 : 회전하는 큐 (파이썬)



문제



나의 답안

from collections import deque
import sys
input = sys.stdin.readline

n,m=map(int, input().split())
arr=list(map(int, input().split()))

q=deque(i for i in range(1,n+1))
cnt=0

for i in arr:
    while True:
        #1번
        if q[0]==i:#큐의 첫번째 인자가 뽑아야되는 수의 위치와 일치
            q.popleft()#뽑는다
            break
        else:
            #2번
            if q.index(i) < len(q)/2: #인덱스 위치가 길이의 반보다 작다면(소수점)
                #왼쪽으로
                while q[0]!=i:
                    q.append(q.popleft())#뽑아서 추가
                    cnt+=1
                                    
                #3번
            else:#인덱스가 크다면(같다면)
                    #오른쪽으로
                while q[0]!=i:
                    q.appendleft(q.pop())#뽑아서 맨 앞에 추가
                    cnt+=1

print(cnt)

접근 방법

  • 1번(q.popleft()) 2번(q.append(q.popleft())) 3번q.appendleft(q.pop())을 구현해주면 된다.
  • 모든 숫자를 찾을 때까지 반복해주어야 하고, 각 숫자에서 오른쪽(또는 왼쪽으로) 반복해서 이동해주어야 하므로 arr안에 총 3개의 while문이 들어가주어야 한다. 만약 원하는 숫자를 찾았다면 1번을 수행해주고 반복문을 종료한다.

좋은 웹페이지 즐겨찾기