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) : 오른쪽이동 사용하기.
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
| [백준][python] 1924 2007년 문제 (0) | 2023.10.09 |
|---|---|
| [백준][python] 2869 달팽이는 올라가고 싶다 문제 (0) | 2023.10.09 |
| [백준][python] 1181 단어 정렬 문제 (0) | 2023.08.01 |
| [백준][python] 10817 세 수 문제 (0) | 2023.07.25 |
| [백준][python] 1026 보물 문제 (0) | 2023.07.19 |