🖥️ 시작하며

파이썬에서는
deque 를 사용하면 모든 연산이 메서드로 있기 때문에 간단하게 풀린다.좀 수학적으로 생각해 풀어봤다.
def Solution(n, positions): # 덱 생성 queue = deque(range(1, n + 1)) count = 0 for pos in positions: index = queue.index(pos) # 왼쪽으로 이동하는 것이 더 가까운 경우 if index <= len(queue) // 2: count += index queue.rotate(-index) # 오른쪽으로 이동하는 것이 더 가까운 경우 else: count += len(queue) - index queue.rotate(len(queue) - index) # 원소 제거 queue.popleft() return count
왼쪽, 오른쪽으로 이동 시 어느 부분이 더 가까울지 판정해서
count 를 증가시키도록 했다.솔직히 이거 C로 푸는건 너무 노가다같은데 일단 풀어봤다.
⚙️ 코드
from collections import deque import sys input = sys.stdin.readline def Solution(n, positions): # 덱 생성 queue = deque(range(1, n + 1)) count = 0 for pos in positions: index = queue.index(pos) # 왼쪽으로 이동하는 것이 더 가까운 경우 if index <= len(queue) // 2: count += index queue.rotate(-index) # 오른쪽으로 이동하는 것이 더 가까운 경우 else: count += len(queue) - index queue.rotate(len(queue) - index) # 원소 제거 queue.popleft() return count if __name__ == "__main__": N, M = map(int, input().split()) positions = list(map(int, input().split())) print(Solution(N, positions))
📌 소감
C언어로 다시 풀어보고 싶은 문제였다. 자료구조 구현 능력이 너무 떨어지는 것 같다.
![[백준] 1021 - 회전하는 큐](https://reo91004.notion.site/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fb4dac9d0-810c-47c4-800c-0ca10b8d0529%2F6246036c-28ac-4ece-90f1-2e1347bad3ba%2Fi_baekjoon.png?table=block&id=116d2f02-2ff6-807a-9e47-d54bb103f552&cache=v2)
![[백준] 1021 - 회전하는 큐](https://reo91004.notion.site/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fb4dac9d0-810c-47c4-800c-0ca10b8d0529%2Fa28333f4-adb0-4b37-8b18-70028a85d8ed%2Fw_baekjoon.jpg?table=block&id=116d2f02-2ff6-807a-9e47-d54bb103f552&cache=v2)

댓글