https://www.acmicpc.net/problem/11866

문제를 처음 봤을때 역시 무슨 말인지 잘 이해가 되지 않았다.

입력값과 출력값을 보면서 손으로 그려보닌까 문제가 이해가 되었다. 입력값 N과 K가 주어지면 1부터 N 까지의 수를 K만큼 뛰어넘으면서 하나씩 빼가는 문제이다. deque의 rotate 메서드를 이용하여 마치 원처럼 돌면서 하나 씩 빼면 될것 같아서 그렇게 이 문제를 접근하였다.
import sys
from collections import deque
N, K = map(int, sys.stdin.readline().split())
cycle = deque([])
list = []
# 1 부터 N 까지 순서대로 cycle 리스트에 담는다.
for i in range(1, N+1):
cycle.append(i)
# cycle 리스트가 빌때까지 반복 한다.
while cycle:
for _ in range(K): # K번 반복
cycle.rotate(-1) # 리스트를 반시계방향으로 회전
list.append(cycle.pop()) # cycle 리스트의 맨뒤의 수를 제거하고 list에 넣는다.
print(list) # 출력
vscode에서 입력과 출력을 했을때 잘 출력되길래 당연히 정답일줄 알았는데 오답이 나왔다. 한참을 생각을 했는데 왜 잘못됬는지 찾기가 힘들었다. 그러다가 정답의 출력 값이 시작과 끝이 '<', '>'로 되어 있는걸 보고 위에대로 출력을 하면 [ ] 리스트 형태로 출력이 되어서 틀린다는 것을 알게 되었다.
위의 코드에서 리스트 형태가 아닌 '<', '>'로 둘러 감싸져서 출력 되게 하면 해결될 것 같다.
# 출력
print('<', end='')
print(', '.join(map(str, list)), end='')
print('>', end='')
출력 부분만 아래 처럼 바꿔 주면 문제가 해결 되었다.
.join()은 문자열을 붙여주는 함수 이기 때문에 list를 str로 바꿔서 join 해야 한다.
알고리즘 문제를 풀면서 여전히 입력과 출력에서 해매는 경우가 많은 것 같다. 오늘 같은 문제는 출력부분을 정확하게 확인 하지 않아서 많은 시간을 해매였던것 같다. 앞으로는 이부분을 유의해야겠다.