n,k = map(int,input().split())
data = [i for i in range(1,n+1)]
arr = []
num = k - 1
for i in range(n):
if len(data) > num: # len(data)-1 >= num:도 가능
arr.append(data.pop(num))
num += k - 1
else:
num = num % len(data)
arr.append(data.pop(num))
num += k - 1
print("<", ", ".join(str(i) for i in arr), ">", sep='')
# print("<", end='')
# for i, val in enumerate(arr):
# print(val, end='')
# if i != n-1:
# print(", ", end='')
# print(">", end='')
일차원 리스트에서 k구간만큼 이동한 후 원소를 POP해주어 별도의 리스트에 저장해서 출력해주면됩니다.
핵심 풀이 비법은 구간이동을 num = k - 1로 계산한 후 이 num의 크기가 현재 원소를 담고있는 data list의 길이보다 작으면 원을 넘지 않은 것이니 그대로 계산해줍니다. 그렇지 않다면 원을 넘어 0 인덱스부터 시작해야 하므로 % 연산자를 이용해 다음 POP될 원소의 인덱스를 계산합니다.
=> 10명중 12번째? , 12 % 10 = 2
num index에 -1 계산해주는 이유는 pop을하면 data 전체 길이가 -1이 되므로
'알고리즘 풀이' 카테고리의 다른 글
[C++] 2020 카카오 블라인드 공채 문자열 압축 (0) | 2021.06.30 |
---|---|
[백준] 1051번 숫자 정사각형 (C++) (0) | 2021.05.31 |
[백준] 10819번 차이를 최대로 , 순열문제 (0) | 2021.05.26 |
[백준] 16945 매직스퀘어로 변경하기 (순열을 이용한 풀이) (0) | 2021.05.24 |
[백준] 1120 문자열 - 완전탐색 (0) | 2021.05.12 |