1. 문제
https://www.acmicpc.net/problem/1021
1021번: 회전하는 큐
첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가
www.acmicpc.net
2. 풀이
from collections import deque
# n : 큐의 크기, m : 뽑아내려는 개수
n, m = map(int, input().split())
# m_list : 뽑으려는 수 리스트
m_list = list(map(int, input().split()))
# n_deque : 해당 크기의 큐
n_deque = deque([i+1 for i in range(n)])
# cnt : 회전 수
cnt = 0
for i in m_list:
i_index = n_deque.index(i)
if i_index <= len(n_deque)-i_index:
cnt += i_index
n_deque.rotate(-1 * i_index)
elif i_index > len(n_deque)-i_index:
cnt += len(n_deque) - i_index
n_deque.rotate(len(n_deque) - i_index)
# print('i_index :', i_index)
n_deque.popleft()
print(cnt)
3. 후기
- 문제의 제목처럼 해당 문제의 풀이는 큐를 회전시키는 방법으로 해결했다. 일단 좌측으로 회전시킬지, 우측으로 회전시킬지 더 적은 회전 수를 찾은 후 회전을 시키는 방식으로 코드를 작성하였다. 기존에 계속해서 큐와 관련된 문제에 사용했던 deque에서 제공하는 함수 중 rotate를 사용하여서 쉽게 해결할 수 있었다.
'알고리즘 공부 > 백준' 카테고리의 다른 글
(Python)백준 코딩테스트 연습 - 비밀번호 찾기(17219) (0) | 2023.01.16 |
---|---|
(Python)백준 코딩테스트 연습 - 접미사 배열(11656) (0) | 2023.01.16 |
(Python)백준 코딩테스트 연습 - 대칭 차집합(1269) (0) | 2023.01.15 |
(Python)백준 코딩테스트 연습 - 로프(2217) (0) | 2023.01.15 |
(Python)백준 코딩테스트 연습 - 30(10610) (0) | 2023.01.13 |