N,K=map(int,input().split(' '))
result=[]
temp=K-1
first=list(range(1,N+1))
for i in range(N):
if temp < len(first):
result.append(first.pop(temp))
temp+=K-1
else:
temp=temp%len(first)
result.append(first.pop(temp))
temp+=K-1
print('<',end='')
for k in result:
if k==result[-1]:
print(k,end='')
else:
print(k,end=', ')
print('>')
요세푸스 문제이다.
과거에 푼 문제라 정확한 풀이가 기억은 안나지만, 풀이 자체는 단순하게, K를 계속 옮겨가면서 풀었던 기억이 난다.
from collections import deque
N,K = map(int,input().split())
stack = deque(range(1,N+1))
result = []
while stack:
stack.rotate(-(K-1))
result.append(str(stack.popleft()))
print(f'<{", ".join(result)}>')
지금 푼다면 이렇게 풀 것이다.
단순하게 큐를 만들고 rotate로 회전을 시킨 뒤, 가장 좌측에 있는걸 뺄것이다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 1316 그룹 단어 체커 (0) | 2021.02.23 |
---|---|
[BOJ/백준] 1260 DFS와 BFS (0) | 2021.02.23 |
[BOJ/백준] 1067 이동 (2) | 2021.02.23 |
[BOJ/백준] 1019 책 페이지 (0) | 2021.02.23 |
[BOJ/백준] 13398 연속합 2 (0) | 2021.02.22 |