똥그래미 코딩공장
백준 11866번(요세푸스 문제0) 파이썬 본문
https://www.acmicpc.net/problem/11866
11866번: 요세푸스 문제 0
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)
www.acmicpc.net
덱, 큐 문제이다. deque를 사용해서 풀면 된다. 문제는 어렵진 않았지만 자잘한 실수들을 발견하는데 시간이 오래걸려 정답을 맞추는데는 오래 걸렸다. 특히 출력형태를 맞추는거에서 시간이 잡혔고 3번째 수를 제거하는 명령어에서 변수에 맞게 코딩을 했어야 하는데 무지성으로 변수 설정이 아닌 상수 고정으로 풀어버려서 계속 막히다가 다시 처음부터 차근히 코딩을 읽다가 문제를 바로 발견하고 풀어 낼 수 있었다.
from collections import deque
a,b = map(int,input().split())
d=deque(range(1,a+1))
k=[]
reald = deque(k)
while len(d)>0:
d.rotate(-(b-1)) // b번째 숫자 전까지 뒤로 보냄
reald.append(d[0]) // b번째 숫자를 추가함 정답 덱에 추가함
d.popleft() // b번째 숫자를 삭제함
print('<'+', '.join(map(str, list(reald)))+'>') // 출력형태 맞춰주기
이 문제의 키포인트는 rotate()를 아냐 모르냐인거 같다.
rotate()는 로테이션을 해주는 함수로
rotate(1) 은 리스트 맨 뒷값을 맨 앞으로 갖고온다
rotate(-1) 은 맨 앞의 값을 맨 뒤로 가져간다.
즉, rotate(n) 은 뒤에서 n번째 수 전에 있는 수들을 앞으로 보내고 rotate(-n) 은 반대로 앞에서 n번째 수 전에 있는 수들을 뒤로 보낸다.
'Algorithm' 카테고리의 다른 글
| 백준 2839 (설탕배달) 파이썬 (0) | 2022.04.02 |
|---|---|
| 백준 1021(회전하는큐) 파이썬 (0) | 2022.03.11 |
| 백준 2164번(카드2) 파이썬 (0) | 2022.02.15 |
| 백준 11399번(ATM) 파이썬 (0) | 2022.02.13 |
| 백준 2851번(슈퍼 마리오) 파이썬 (0) | 2022.02.13 |