1158 요세푸스 문제
한 줄에 n,k 두 가지 입력값을 넣어야 된다는 것을 깜빡하고 두 줄로 나누어서 입력받았는데, 런타임 에러가 떴다. map과 split을 이용해 해결하였음
이전 코드 :
n = int(input())
k = int(input())
수정 후 코드 :
n, k = map(int, input().split())
문제를 풀고 그대로 print하여 출력하려 했지만 문제 지시 사항에 리스트 그대로 출력하는 것이 아닌, "<>" 꺽새 모양 안에 넣어 출력하라는 것을 발견. 이후 join과 포맷을 지정해 출력할때 사용하는 퍼센트 기호(%)를 사용해 출력하여 해결하였음
완성 코드 :
n, k = map(int, input().split())
arr = []
yose = []
cur = 0 #current
curr = 0 #pop(cur)
for i in range(n):
arr.append(i+1)
while len(arr) >0:
cur = (cur + (k-1)) % len(arr)
curr = arr.pop(cur)
yose.append(str(curr))
print("<%s>" %(", ".join(yose)))
느낀 점 : 처음 문제를 받았을 때는 원형 큐를 만들어야할까, rear와 front를 지정해 count 변수를 만들어서 배열의 길이에 따라 count를 늘렸다 줄였다 해볼까 고민을 해보았다. 하지만 이전에 잔돈 계산하기 문제를 풀었던게 생각났고, 그때 나머지 기호(%)를 이용해 문제를 해결했던게 생각났다. 덕분에 문제를 해결할 수 있었다.