[Python] 백준 1021번: 회전하는 큐

Jonie Kwon·2022년 4월 23일
0


https://www.acmicpc.net/problem/1021

풀이

시계방향, 반시계 방향으로 회전하는 함수를 만들고 찾으려는 숫자까지 더 짧은 거리로 회전한 방향을 선택한다.

코드

from collections import deque
n,m = map(int,input().split())
q = [x for x in range(1,n+1)]
nums = list(map(int,input().split()))
q = deque(q)

def clockwise(n):
    cnt = 0
    global q
    while q[0] != n:
        q.rotate(1)
        cnt +=1
    q.popleft()
    return cnt
def counterclock(n):
    cnt = 0
    global q2
    while q2[0] != n:
        q2.rotate(-1)
        cnt +=1
    q2.popleft()
    return cnt

q2 = q.copy()
answer = 0
for n in nums:
    answer += min(clockwise(n), counterclock(n))
print(answer)

다른 풀이

회전하기 전 미리 현재 위치와 뽑으려는 숫자의 인덱스의 위치를 파악하고 더 짧은 거리로 회전하여 더하는 방식

n,m = map(int,input().split())
q = list(range(1,n+1))
front = 0
ans = 0
for k in map(int,input().split()):
    i = q.index(k)
    ans += min(c:=abs(i-front),len(q)-c) 
    q.pop(i)
    if q: front = i%len(q)
print(ans)
profile
메모하는 습관

0개의 댓글