공부하고 기록하는, 경제학과 출신 개발자의 노트

프로그래밍/코딩테스트 문제풀이

[Python] 백준 1021. 회전하는 큐

inspirit941 2020. 2. 10. 12:23
반응형

https://www.acmicpc.net/problem/1021

 

1021번: 회전하는 큐

첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 순서대로 주어진다. 위치는 1보다 크거나 같고, N보다 작거나 같은 자연수이다.

www.acmicpc.net

Python의 deque.rotate를 쓰면 쉽게 해결할 수 있는 문제.

 

deque.rotate(iter) : iter 횟수만큼 deque의 맨 뒷 값을 맨 앞으로 이동시킨다.

deque.rotate(-iter) : iter 횟수만큼 deque의 맨 앞 값을 맨 뒤로 이동시킨다.

 

해당 숫자가 있는 index를 구해서

index값이 전체 length 길이의 절반보다 길면 deque의 뒤에서 앞으로 회전시키는 게 이득이고,

그 반대면 deque의 앞에서 뒤로 값을 회전시키는 게 이득이다.

 

예컨대 [1,2,3,4,5,6,7] 이고 6을 빼내야 한다면

6 위치의 index는 5.

5는 전체 index 길이인 7을 2로 나눈 몫인 3보다 크다.

따라서 리스트의 뒤에서부터 앞으로 회전시키는 게 최솟값이다.

-> [6, 7, 1, 2, 3, 4, 5] 순으로 2번 rotate하면 되고, deque코드로는 rotate(len(List) - index) 형태로 구현하면 된다.

 

 

 

 

반응형