[白俊]1021号:回転するQ(Python)



質問する



私の答え

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回実行して繰り返し文を終了します.