자기개발👨💻/코딩 알고리즘
[python] 백준11866 요세푸스문제 0
천숭이
2021. 7. 12. 01:14
https://www.acmicpc.net/problem/11866
11866번: 요세푸스 문제 0
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)
www.acmicpc.net
from collections import deque
n,k = map(int,input().split())
numbers = deque([i for i in range(1,n+1)])
cnt=0
result="<"
for i in range(n*k):
cnt += 1
if cnt==k:
tmp=numbers.popleft()
result+=str(tmp)+", "
cnt=0
else:
tmp = numbers.popleft()
numbers.append(tmp)
result=result[:-2]
result+=">"
print(result)
cnt는 k까지 가는 횟수이다. 따라서 cnt가 k일때와 아닐때로 경우를 나눴다.
인덱스를 사용하면 머리아파지므로 맨 앞에서 작업을 할 수 있게 반복문을 순회할때마다 pop한 값을 append해서 진행하기로 했다. 리스트였다면 연산 시간이 길어졌을테지만 deque를 사용하므로 실행시간을 대폭 줄일 수 있었다.
cnt가 k보다 작을때 :
맨 앞 수를 pop하고 tmp에 저장한다음 "tmp, "형태로 result에 추가한다.
k번째 수를 만났으므로 cnt는 0으로 초기화한다.
cnt가 k일때 :
tmp값을 numbers 뒤에 추가한다.