코딩테스트/백준

[백준][Python] 1158. 요세푸스 문제

내만 2022. 8. 24. 15:29
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