백준 1021 회전하는 큐

김민영·2023년 1월 14일
0

알고리즘

목록 보기
71/125

과정

  • 덱에서 찾으려는 값의 인덱스를 구한다.
  • 해당 인덱스를 전체 길이 // 2와 비교해서 앞에 있으면 앞으로 돌리고, 뒤에 있으면 뒤로 돌린다.
  • 맨 앞에 찾으려는 값이 있으면 멈추고 popleft
from collections import deque
N, M = map(int, input().split())
lst = map(int, input().split())
queue = deque(list(i for i in range(1, N+1)))
ans = 0
for i in lst:
    for j in range(N):
        if i == queue[j]:
            idx = j
    # 오른쪽으로 돌림
    if idx > N//2:
        while queue[0] != i:
            a = queue.pop()
            queue.appendleft(a)
            ans += 1
    # 왼쪽으로 돌림
    else:
        while queue[0] != i:
            a = queue.popleft()
            queue.append(a)
            ans += 1
    queue.popleft()
    N -= 1
print(ans)

뻘짓

  • 큐를 돌린만큼을 계속 계산해서 다음 들어올 수가 어느 위치에 있을지 계산하는 방식을 계속 생각했었다.
  • 입력이 50까지만 들어오므로 인덱스를 하나하나 찾는 것도 괜찮다.
profile
노션에 1차 정리합니당 - https://cream-efraasia-f3c.notion.site/4fb02c0dc82e48358e67c61b7ce8ab36?v=

0개의 댓글