728x90
문제 2164. 카드2
1. 나의 코드와 발상 과정
from collections import deque
n = int(input())
queue = deque([i for i in range(n, 0, -1)])
while len(queue) > 1:
queue.pop()
queue.rotate(1) # queue.appendleft(queue.pop())
print(queue[0])
4321 을 예로 들면, 1번이 빠지고 432가 남고 그다음 2를 맨 뒤에 배치해서 243이 되게 만든다. 이 순환을 반복해서 하나의 원소만 남게 하면 된다.
구글 선생님께 queue.appendleft(queue.pop())의 과정을 단순하게 할 수 있는 것이 무엇이 있냐 했더니,
collection.deque 모듈의 rotate()를 알려주셨다.
deque의 rotate()는 숫자를 넣은 만큼 리스트 전체의 수를 회전시켜준다. 양수를 넣으면 오른쪽(시계방향)으로, 음수를 넣으면 왼쪽(반시계방향)으로 회전한다. (맨 오른쪽의 숫자가 맨 왼쪽으로 오거나, 맨 왼쪽의 숫자가 맨 오른쪽으로 온다)
숫자가 올라갈 수록 회전하는 횟수가 증가한다.
문제 출처
728x90
'Problem Solving' 카테고리의 다른 글
[백준] 9012 괄호 python 알고리즘 문제 (0) | 2022.04.25 |
---|---|
[백준] 10773 제로 python 알고리즘 문제 (0) | 2022.04.24 |
[백준] 11866 요세푸스 문제 0 python 알고리즘 문제 (0) | 2022.04.24 |
[백준] 10866 덱 python 알고리즘 문제 (0) | 2022.04.24 |
[백준] 10845 큐 python 알고리즘 문제 (0) | 2022.04.24 |
댓글