BOJ - 1021번 회전하는 큐 (Python)

woga·2021년 1월 12일
0

python 풀이

목록 보기
11/27
post-thumbnail

문제 출처: https://www.acmicpc.net/problem/1021

난이도

Silver 4


풀이 방법

원형큐인걸 알고 덱을 사용하면 되겠다 싶었다. 근데 C++스럽게 푸니깐 이상하게 파이썬은 대입된 원래 deque도 데이터 변경이 같이 되서 이게 뭔가.. 싶었다. 그래서 Python 다른 풀이를 참고했고 rotate 내장함수가 있다는 걸 알고 이를 이용했다
deque 길이을 반으로 나눠 pop하고자 하는 value의 index값을 비교한다. 이게 작고 크고로 나눠 rotate를 했고 주석을 참고하면 된다!


통과 코드

from collections import deque
import sys
if __name__ == '__main__':
    N,M = map(int,input().split())
    if N == 0:
        print(0)
        sys.exit()

    numbers = list(map(int, input().split()))
    dq = deque(range(1, N + 1))

    result = 0

    for i in range(len(numbers)):
        if numbers[i] == dq[0]:
            dq.popleft()
            continue
        dq_idx = dq.index(numbers[i])

        if dq_idx > len(dq) // 2:
            # 시계
            dq.rotate(len(dq) - dq_idx)
            result += (len(dq) - dq_idx)
        elif dq_idx <= len(dq) // 2:
            # 반시게
            dq.rotate(-dq_idx)
            result += dq_idx
        dq.popleft()

    print(result)
profile
와니와니와니와니 당근당근

0개의 댓글