import sys
input = sys.stdin.readline
n, k = map(int, input().split())
people = [num+1 for num in range(n)]
idx = 0
print("<", end="")
while people:
idx += k-1
if idx > len(people)-1:
idx %= len(people)
print(f"{people.pop(idx)}", end="")
if people:
print(", ", end="")
print(">")
idx=0 에서 시작해서 k-1을 더해주면서 k번째 차례가 된 원소를 기존리스트.pop(idx)로 기존리스트에서 삭제함과 동시에 바로 출력한다.
기존 리스트의 길이가 0이 될때까지 위의 과정을 반복한다. 이때 idx가 인덱스 범위를 초과했다면 리스트의 길이만큼 나눠준다.(원개념)
출력형태를 맞추는 것도 꽤 신경 써야 했다.
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
# 1.
people = list(range(1, n+1))
ans = []
idx = 0
while people:
# 2.
idx = (idx + k - 1) % len(people)
ans.append(str(people.pop(idx)))
# 3.
print("<" + ", ".join(ans) + ">")
빈 배열 ans[]를 준비한다.
people 배열이 빌 때까지 idx = (idx + k - 1) % len(people)
를 반복하여 그때의 배열 내의 k번째 원소를 찾아낸다.
이때 그 k번째 원소를 ans 배열에 문자열로 바꿔서 저장한다.
그래야 마지막 결과를 출력할 때 .join()을 사용할 수 있다.
list(range(숫자범위))
인덱스가 범위를 초과하지 않는 경우 len(people)로 나눈 나머지값과 같기 때문에 모든 경우에 len(people)로 나눠줘서 코드를 단축한다.
출력 방법 익히기
*ans배열에 저장할때 문자열로 바꾸고 저장
*join함수 익히기