[백준] 1021 - 회전하는 큐
[백준] 1021 - 회전하는 큐

[백준] 1021 - 회전하는 큐

언어
Python
C
난이도
Sliver 3
다시 풀어보기
다시 풀어보기
알고리즘 유형
작성자
박용성박용성
생성 일시
2024년 10월 06일

🖥️ 시작하며

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

댓글

guest