본문 바로가기
코딩테스트/파이썬

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

by 커피는아아 2021. 3. 10.
반응형

문제 풀이

# 예제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)