백준|1021번|회전하는 큐

README·2022년 7월 31일
0

파이썬 PS풀이

목록 보기
68/136

문제설명
양방향 큐에서 특정 위치의 값을 뽑아내는데 필요한 최소한의 연산 횟수를 구하는 문제입니다.(사용 가능한 연산은 큐 맨 앞의 값을 뽑기, 큐를 왼쪽으로 이동, 큐를 오른쪽으로 이동의 3가지입니다.)

작동 순서
1. 큐의 길이와 뽑아낼 값의 개수를 입력받습니다.
2. 큐를 생성하고 뽑아낼 값들을 입력받습니다.
3. 뽑아낼 큐의 위치를 확인하고 중간보다 앞에 있는 경우 2번연산을 계속 수행해서 원하는 값을 1번에 위치시키고 뽑아냅니다.
4. 뽑아낼 큐의 위치가 중간보다 뒤에 있는 경우 3번연산을 계속 수행해서 원하는 값을 1번에 위치시키고 뽑아냅니다.
5. 뽑아낼 수를 모두 뽑아낸 후 몇번의 연산이 수행되었는지 출력합니다.

소스코드

from collections import deque
N, M = map(int, input().split())
q = deque()
for i in range(1, N+1):
    q.append(i)
popList = list(map(int, input().split()))
num = 0
count = 0
while num < M:
    where = q.index(popList[num])
    if where == 0:
        q.popleft()
        num += 1
    elif where < len(q)/2:
        q.append(q.popleft())
        count += 1
    else:
        q.appendleft(q.pop())
        count += 1
print(count, end="")
profile
INTP 개발자 지망생

0개의 댓글