본문 바로가기
Problem Solving

[백준] 2164 카드2 python 알고리즘 문제

by DuncanKim 2022. 4. 24.
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()는 숫자를 넣은 만큼 리스트 전체의 수를 회전시켜준다. 양수를 넣으면 오른쪽(시계방향)으로, 음수를 넣으면 왼쪽(반시계방향)으로 회전한다. (맨 오른쪽의 숫자가 맨 왼쪽으로 오거나, 맨 왼쪽의 숫자가 맨 오른쪽으로 온다)

숫자가 올라갈 수록 회전하는 횟수가 증가한다.

 

 

 

 

 

문제 출처

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

728x90

댓글