Kim Seon Deok

[백준]1158 요세푸스 문제 본문

python/Algorithm

[백준]1158 요세푸스 문제

seondeok 2022. 1. 8. 22:32

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

 

1158번: 요세푸스 문제

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)

www.acmicpc.net

<문제 요약>

1.N명의 사람이 원을 이루어 앉음

2.양의 정수 k가 주어짐

3.순서대로 k번째 사람을 제거해 N명의 사람이 모두 제거될 때까지 계속한다.

 

 

N, k = list(map(int, input().split()))

people = []

ans = []  # 정답을 담을 리스트

for i in range(1,N+1):
    people.append(i)


  # 제거하려는 인덱스 시작
a = people.pop(k-1)
ans.append(a)

i = (k-1)  # 2부터 시작 & len(people) == 6

while len(people) > 0:

    b = ((i + (k -1))  % (len(people)))

    c = people.pop(b)
    ans.append(c)
    
    i = b

print("<%s>" %(", ".join(map(str,ans))))

<접근방법>

(제거인덱스 + (k -1))  % (제거 후 리스트 길이)

맨 마지막 출력 형식이

< 3, 6, 2, 7, 5, 1, 4 >임에 주의!

print("<%s>" %(", ".join(map(str,ans))))를 이용

 

'python > Algorithm' 카테고리의 다른 글

[백준] 9012 - 괄호  (0) 2022.01.14
[백준]1302 베스트셀러  (0) 2022.01.08
[백준] 1343번 폴리오미노  (0) 2022.01.06
[코드업] [기초-리스트] 성실한 개미  (0) 2022.01.06
[백준]11170 0의 개수  (0) 2022.01.06
Comments