[백준] 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번을 수행해주고 반복문을 종료한다.
Author And Source
이 문제에 관하여([백준] 1021번 : 회전하는 큐 (파이썬)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yj_lee/백준-1021번-회전하는-큐-파이썬저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)