문제
코드
My answer
import sys
from collections import deque
input=sys.stdin.readline
n,m=map(int,input().split())
a=deque([i+1 for i in range(n)])
b=list(map(int,input().split()))
cnt=0
while(len(b)!=0):
if(a[0]==b[0]):
a.popleft()
b.pop(0)
else:
ind=a.index(b[0])
if(ind>len(a)/2):
tmp=a.pop()
a.appendleft(tmp)
else:
tmp=a.popleft()
a.append(tmp)
cnt+=1
print(cnt)
Another answer
from collections import deque
n,m = list(map(int,input().split()))
value = list(map(int,input().split()))
q = deque([i+1 for i in range(n)])
count = 0
for x in value:
while True:
if q.index(x) == 0:
q.popleft() #1번
break
if q.index(x) - 0 <= len(q) - q.index(x): # 2번
q.append(q.popleft())
count += 1
else:
q.appendleft(q.pop()) # 3번
count += 1
print(count)
풀이
우선 deque를 사용해서 양방향에서 쉽게 빼고 붙이게 함수를 사용했고, 큐의 첫번째 원소가 우리가 원하던 숫자면 1번방법을 쓰면되므로 pop을 해주고, 원하던 숫자가 아니면 원하는 숫자까지의 거리가 왼쪽으로 가는게 빠른지 오른쪽으로 가는게 빠른지를 찾아준다. 찾아주면 큐를 조작하여 원하는 숫자가 첫번째 원소로 오게 만들어주면된다. deque함수를 쓰는게 제일 좋아보인다.
728x90
반응형
'코딩테스트 > 백준[Python]' 카테고리의 다른 글
[Python] 백준 #11729 - 최대 힙 (0) | 2022.02.28 |
---|---|
[Python] 백준 #5397- 키로거 (0) | 2022.01.25 |
[Python] 백준 #1966- 프린터 큐 (0) | 2022.01.23 |
[Python] 백준 #2776- 암기왕 (0) | 2022.01.23 |
[Python] 백준 #10546- 배부른 마라토너 (0) | 2022.01.23 |