코딩하는 베어브릭
백준 11866번. 요세푸스 문제 0 (파이썬) 본문
문제
https://www.acmicpc.net/problem/11866
11866번: 요세푸스 문제 0
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)
www.acmicpc.net
문제 풀이
1. 1부터 n명의 사람을 리스트로 담는다.
2. 위의 리스트에서 k번째가 아니라면 리스트의 첫번째 요소를 다시 맨 뒤로 보내고, k번째라면 리스트의 첫번째 요소를 리스트에서 삭제한다.
3. 위의 과정을 공백리스트가 될 때까지 반복한다.
import sys
n,k=map(int,input().split())
people=[str(x+1) for x in range(n)]
i=1
res=[]
while people!=[]:
if i==k:
res.append(people.pop(0))
i=1
else:
people.append(people.pop(0))
i+=1
print('<'+", ".join(res)+'>')
더 나은 풀이
위의 코드는 k번째를 찾을 때까지 리스트 요소를 pop하고 append하는 과정을 반복했으나, 이 코드는 리스트에서 k번째가 어디에 위치하는 지 바로 찾아 pop한다.
import sys
n, k = map(int, input().split())
people = list(range(1, n+1))
res = []
i = 0
while people:
i = (i+k-1) % len(people)
res.append(str(people.pop(i)))
print('<'+', '.join(res)+'>')'알고리즘 > 백준' 카테고리의 다른 글
| 백준 18870번. 좌표 압축 (파이썬) (0) | 2022.08.11 |
|---|---|
| 백준 13900번. 순서쌍의 곱의 합 (파이썬) (0) | 2022.07.01 |
| 백준 9935번. 문자열 폭발 (파이썬) (0) | 2022.06.30 |
| 백준 9012번. 괄호 (파이썬) (0) | 2022.06.28 |
Comments