2164번: 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net

 

✏️ 내가 작성한 코드 - 1

import sys
from collections import deque

N = int(sys.stdin.readline().strip())
lst = [i for i in range(1,N+1)] # 리스트컴프리헨션 사용 후 deque()
lst = deque(lst)
while(len(lst)>1): # 1개 남을때까지 반복
    lst.popleft() # 왼쪽에서 뺌
    lst.append(lst.popleft()) # 왼쪽에서 뺀거 오른쪽에 더함

print(lst.pop())

 

✏️ 내가 작성한 코드 - 2

import sys
from collections import deque

N = int(sys.stdin.readline().strip()) # 입력
lst = deque(range(1,N+1)) # deque안에서 range사용

while(len(lst)>1):# 1개 남을때까지 반복
    lst.popleft() # 맨 왼쪽값 꺼내기
    lst.rotate(-1) # 맨 앞에값 맨 뒤로

print(lst.pop())

 

✏️ 내가 작성한 코드 - 3 (rotate() 사용)

import sys
from collections import deque

N = int(sys.stdin.readline().strip()) # 입력
lst = deque()
for i in range(1, N+1):
    lst.append(i) # deque에 값 차례대로 append

while(len(lst)>1):# 1개 남을때까지 반복
    lst.popleft() # 맨 왼쪽값 꺼내기
    lst.rotate(-1) # 맨 앞에값 맨 뒤로, rotate() 사용

print(lst.pop())

 

✏️ 참고

* deque() 에서 괄호안에 range사용이 가능하다는 것을 처음 알았다.

* rotate() - deque의 목록회전이 가능한 rotate를 활용하면 훨씬 간편하게 앞의 값을 뒤로 보낼 수 있다.

맨앞의 값을 맨뒤로 보낼땐 rotate(-1) : 왼쪽이동 , 맨뒤 값을 맨앞으로 보낼땐 rotate(1) : 오른쪽이동 사용하기.

+ Recent posts