😁 빅데이터 문제 풀기 & Study/- BAEKJOON 문제

CLASS 2 / [11866] 요세푸스 문제 0 / 파이썬

또방91 2022. 2. 1. 07:25
728x90

 

 

 

 

✏️ 문제 링크

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

 

11866번: 요세푸스 문제 0

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

www.acmicpc.net

 


정답은 ??

1
2
3
4
5
6
7
8
9
10
11
12
n,k= map(int,input().split())
a= list(range(1,n+1))
result=[]
 
index = 0
while a:
    index += k-1
    if index >=len(a):
        index %= len(a)
    result.append(str(a.pop(index)))
    
print('<'+ ', '.join(map(str, result)) + '>')
cs

💯 풀이 과정

1) 일단 range로 1~n개까지 숫자의 리스트를 만든다.

2) 6번째줄 -> a리스트 안에 요소가 있을 때까지 반복된다.( = 요소가 있으면 True)

3) 7번째줄 -> a의 index변수의 인덱스로 빼내는데 인덱스는 0부터 시작하니까 (k-1)더해가면서 배수 계산한다.

4) 배수안에 있으면 10번째 줄에 썼던 것처럼 pop을 한다,

5) 8번째줄 ->  if조건의 인덱스가 a리스트 개수 이상일 때, 다시 인덱스 수를 줄여줘야하는데, 나머지들을 포함시켜서 그 다음 사이클에 넣어줘야한다. %=를 사용한다.

(예: 만약 1~ 7까지 숫자 중 3개씩 뽑을 때 1,2,(3),4,5,(6),7 이렇게 하면 ==> 3,6 뽑고 '남은 숫자7' 1개를 다음 사이클에 있어야하니까)

6) 나중에 출력은 < >괄호와 result 리스트안을 ', '으로 연결시키면서 출력하도록한다.


😎 오늘의 한줄평

while 반복문의 조건을 잘 설정하지 못해 엄청 애먹었는데, 앞으로 잘 설정해보장!

 

728x90