출처 : https://www.acmicpc.net/problem/1021
코드 & 풀이
import sys
from collections import deque
# 입력 처리
data = sys.stdin.read().splitlines()
N, M = map(int, data.pop(0).split(" "))
dq = deque()
for i in range(1, N + 1):
dq.append(i)
targets = [int(i) for i in list(data.pop(0).split(" "))]
answer = 0
for target in targets:
idx = dq.index(target)
size = len(dq)
if idx == 0:
dq.popleft()
elif idx <= size - idx:
dq.rotate(-idx)
answer += idx
dq.popleft()
else:
dq.rotate(size - idx)
answer += (size - idx)
dq.popleft()
print(answer)
deque를 사용하면 아주 쉽게 풀 수 있는 문제입니다.
특히 deque는 rotate(n)라는 메서드가 있는데,
데크(deque)의 원소들을 오른쪽 또는 왼쪽으로 회전시키는 기능을 합니다.
from collections import deque
dq = deque([1, 2, 3, 4, 5])
dq.rotate(2)
print(dq) # deque([4, 5, 1, 2, 3])
dq.rotate(-3)
print(dq) # deque([2, 3, 4, 5, 1])
n > 0이면 오른쪽으로
n < 0이면 왼쪽으로 돌려줍니다.
728x90
'백준 > 실버' 카테고리의 다른 글
백준1463. 1로 만들기 - Python, DP, DFS (0) | 2025.05.11 |
---|---|
백준9012. 괄호 - Python, stack (0) | 2025.05.10 |
로봇 - Python, 구현 (0) | 2025.03.26 |
트리의 부모 찾기 - Python, BFS, 재귀 깊이 제한 키우기 (0) | 2025.03.07 |
백준 > 9711번 > 피보나치 - JAVA (2) | 2023.06.02 |