알고리즘 문제 풀이: 파이썬/BOJ

[BOJ_1021] 회전하는 큐

hueco 2022. 5. 17.

 

문제 링크: https://www.acmicpc.net/problem/1021

 

1021번: 회전하는 큐

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

www.acmicpc.net

 

내 풀이:

 

Review:

 deque의 원소를 회전하는 rotate()를 정말 오랜만에 써봤다. 해당 내용을 정리하기위해 블로그에 포스팅도 했다.

 deque에서는 리스트에서의 슬라이싱과 같은 방법을 이용할 수 없다. 따라서 해당 부분을 검색해보니 deque에서도 슬라이싱 적용이 가능할 수 있게 만드는 함수인 islice를 알게 되었다. 앞으로 또 사용할 일이 있을지 모르겠지만 해당 부분을 기억해둬야겠다.

 

Idea:

- order에서 원소를 하나꺼내 어떤 수를 뽑아야 하는지 확인
- 해당 원소(num)를 기준으로 deq에서 앞에 있는 원소가 많은지 뒤에 있는 원소가 많은지 확인

- 앞에 있는 원소가 많다면 deque를 오른쪽을 회전, 원소의 교환횟수인 cnt를 1증가
  또, deque의 첫 번째 원소가 num인지 확인후 맞다면 del deq[0]로 해당 원소를 지운다

- 뒤에 있는 원소가 많다면 deque를 왼쪽으로 회전, 원소의 교환횟수인 cnt를 1증가
  또, deque의 첫 번째 원소가 num인지 확인후 맞다면 del deq[0]로 해당 원소를 지운다

- 반복문이 종료되면 cnt를 출력한다.

 

Reference:

https://stackoverflow.com/questions/10003143/how-to-slice-a-deque

 

How to slice a deque?

I've changed some code that used a list to using a deque. I can no longer slice into it, as I get the error: TypeError: sequence index must be integer, not 'slice' Here's a REPL that shows the

stackoverflow.com

https://docs.python.org/3/library/itertools.html

 

itertools — Functions creating iterators for efficient looping — Python 3.10.4 documentation

itertools — Functions creating iterators for efficient looping This module implements a number of iterator building blocks inspired by constructs from APL, Haskell, and SML. Each has been recast in a form suitable for Python. The module standardizes a co

docs.python.org

 

'알고리즘 문제 풀이: 파이썬 > BOJ' 카테고리의 다른 글

[BOJ] 회사에 있는 사람  (0) 2022.05.29
[BOJ_2002] 추월  (0) 2022.05.29
[BOJ_1541] 읽허버린 괄호  (0) 2022.05.08
[BOJ_1406] 에디터  (0) 2022.05.05
[BOJ_9375] 패션왕 신해빈  (0) 2022.05.05

댓글