[BOJ] 2164 카드 2

nerry·2022년 1월 14일
0

알고리즘

목록 보기
8/86

2164 카드2

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, 내 풀이 이다.

profile
터벅터벅 개발(은좋은)자 로그

0개의 댓글

관련 채용 정보