from collections import deque
N=int(input())
q=deque([i for i in range(1,N+1)])
cnt=0
while(len(q)!=1):
cnt+=1
front = q.popleft()
if cnt%2==0: # 짝수
q.append(front)
print(q[0])
순서를 세서 짝수 차례일때 append를 했다. 통과는 했지만 뭔가 아쉬운 코드라 찝찝했다..
import sys from collections
import deque
N = int(sys.stdin.readline())
queue = deque()
for i in range(N): queue.append(i + 1)
while len(queue) > 1: # 한 번에 두 과정을 진행
queue.popleft()
queue.append(queue.popleft())
print(queue.pop())
# 출처: https://suri78.tistory.com/50 [공부노트]
이런 식으로 하면 굳이 변수와 if문을 낭비할 필요가 없다. 근데.. 속도가 조금 더 느리다.. 왜지..
import sys
from collections import deque
N = int(sys.stdin.readline())
deque = deque([i for i in range(1,N+1)])
while(len(deque) > 1):
deque.popleft() # 카드에서 가장위에 있는 수 버림
deque.rotate(-1)
# rotate()함수를 이용해 deque안에 있는 값들을 왼쪽으로 한칸씩 이동 0번째 인덱스에 있는 값은 가장 마지막 인덱스로 이동
print(deque[0])
rotate를 이용하는게 나쁘지 않다고 생각했다.
순서대로 2, 1+내 풀이, 1, 내 풀이 이다.