🖥️ 시작하며
파이썬에서는
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언어로 다시 풀어보고 싶은 문제였다. 자료구조 구현 능력이 너무 떨어지는 것 같다.
댓글