728x90
반응형
반응형
🙆♂️문제
🙋♂️풀이
요세푸스 문제를 정리하자면
n과 k를 입력받고 1부터 n까지의 수가 원을 이루며 있는데
계속적으로 k번 째 수를 빼내는 것입니다.
1부터 시작되어서 3번 째 수를 빼내고 그 다음은
4부터 해서 6을 빼고 이런식으로 해서 다 빼내는 것입니다.
🚀 입력받기
import sys
n,k = map(int ,sys.stdin.readline().split())
arr=[]
for i in range(n):
arr.append(i+1)
n과 k를 입력받고 1부터 n까지수로 된 리스트를 만듭니다.
🚀 문제 풀이 핵심
jose=[]
i=0
while len(arr) != 0:
i+=k
i = i % len(arr) - 1
jose.append(arr[i])
arr.pop(i)
if i == -1:
i = len(arr)
위와 같은 기능으로 동작을 하는 코드를 작성했습니다.
간단하게 설명하면 index값을 구하고 해당 index값의 데이터를 jose 리스트에 넣고 pop하는 것입니다.
index 값을 구하는 법은 처음에는 k값으로 두고 배열의 길이로 나눈 나머지에 1을 뺀 값입니다.
그런데 예외상황으로 -1이 나오는 경우가 있는데 데이터 접근하는데 있어서 문제없는 값이지만
다음 index를 구할 때 값이 변질되기 때문에 정확하게 현재 리스트의 제일 뒤 값을 지정해주도록 했습니다.
🚀 출력하기
print('<',end="")
for i in range(len(jose)):
if i == len(jose)-1:
print(jose[i], end="")
else:
print(jose[i], end=", ")
print('>',end="")
출력 형식이 따로 있더라구요
혹시 리스트 형식을 출력할 때 <>로 할 수 있는 방법을 아시는 분은 공유를.. 해주세요!
728x90
728x90
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
[백준][Python] 10866. 덱 (0) | 2022.08.29 |
---|---|
[백준][Python] 4101. 크냐? (0) | 2022.08.24 |
[백준][Python] 10845. 큐 (0) | 2022.08.24 |
[백준][Python] 2163. 초콜릿 자르기 (0) | 2022.08.23 |
[백준][Python] 3046. R2 (0) | 2022.08.23 |