1. %를 이용한 풀이
import sys
input = sys.stdin.readline
N, K = map(int, input().split())
array = [x+1 for x in range(N)]
removed = []
idx = 0
while array:
idx += K-1
# idx가 배열의 길이를 초과하면 다시 처음으로 돌아간다.
idx = idx%len(array)
removed.append(array.pop(idx))
# f""과 join을 활용하여 출력
print(f"<{', '.join(map(str, removed))}>")
2. deque를 이용한 풀이
import sys
from collections import deque
input = sys.stdin.readline
N, K = map(int, input().split())
queue = deque([x+1 for x in range(N)])
removed = []
# queue의 값이 존재할 때 까지
while queue:
queue.rotate(-(K-1)) # -2만큼 왼쪽으로 회전
# deque([3, 4, 5, 6, 7, 1, 2])
# deque([6, 7, 1, 2, 4, 5])
# deque([2, 4, 5, 7, 1])
# deque([7, 1, 4, 5])
# deque([5, 1, 4])
# deque([1, 4])
# deque([4])
# 3번째 값이 queue가장 왼쪽에 배치된다
# rotate된 queue의 가장 왼쪽 값을 removed 배열에 추가
removed.append(queue.popleft())
print(f"<{', '.join(map(str, removed))}>")
'공부 > 코딩테스트' 카테고리의 다른 글
[코딩테스트 연습(Python)] 백준 1463번_1로 만들기(DP) (0) | 2025.04.22 |
---|---|
[코딩테스트 연습(Python)] 백준 1620번_나는야 포켓몬 마스터 이다솜 (0) | 2025.04.14 |
[코딩테스트 연습(Python)] 백준 1920번_수 찾기(이진 탐색) (0) | 2025.04.10 |
[코딩테스트 연습(Python)] 백준 1181번_단어 정렬 (0) | 2025.04.07 |
[코딩테스트 연습(Python)] 백준 10814번_나이순 정렬 (0) | 2025.04.07 |