반응형
문제 풀이
# 예제2 해석
# 1번 연산: 앞에 있는 것 빼기 (data.popleft())
# 2번 연산: 왼쪽으로 밀기 (data.append(data.popleft()))
# 3번 연산: 오른쪽으로 밀기 (data.appendleft(data.pop()))
n,m = 10, 3
value = [2,9,5] # 뽑아 내려는 수가 2 9 5 일 때
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 2 수행 후
2, 3, 4, 5, 6, 7, 8, 9, 10, 1
# 1 수행 후
3, 4, 5, 6, 7, 8, 9, 10, 1
# 3, 3, 3 수행 후
9, 10, 1, 3, 4, 5, 6, 7, 8
# 1 시행 후
10, 1, 3, 4, 5, 6, 7, 8
# 2,2,2,2 or 3,3,3,3 시행 후
5,6,7,8,10,1,3,4
# 1 시행 후
6,7,8,10,1,3,4
코드
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
# 위치 0과의 거리 차이로 왼쪽으로 이동할 지 오른쪽으로 이동할 지를 결정
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)
'코딩테스트 > 파이썬' 카테고리의 다른 글
[백준] 스택 수열 1874 (파이썬) (0) | 2021.03.10 |
---|---|
[백준] 균형잡힌 세상 4949 (파이썬) (0) | 2021.03.10 |
[백준] 나무자르기 2805 (파이썬) (0) | 2021.03.09 |
[백준] 좌표 정렬하기2 11651 (파이썬) (0) | 2021.03.09 |
[백준] [재귀 분석 추가] 하노이의 탑 이동 순서 1759 (파이썬) (2) | 2021.03.08 |