백준 11866번 : 요세푸스 문제 0
2024. 6. 4. 11:13ㆍ개인활동/코테
반응형
https://www.acmicpc.net/problem/11866
from collections import deque
n, k = map(int, input().split())
people = deque([i for i in range(1, n+1)])
pop_list = []
for _ in range(n):
people.rotate(-k)
pop_list.append(people.pop())
print("<" + ", ".join(map(str, pop_list)) + ">")
이 문제를 어떻게 해결하는 것이 좋을지 고민하던 중 deque에서 쓸 수 있는 rotate를 이용하면 편할 것이라고 생각하였고,그 결과 잘 출력되는 것을 확인하였다. 시계방향으로 k번째 요소를 뒤로 보내고, 맨 뒤의 요소만 출력해 pop_list에 넣어주었다.
다음은 숏코드 분석
n,k=map(int,input().split())
c,*a=range(n+1)
print(f'<{str([a.pop(c:=(c+k-1)%b)for b in a[::-1]])[1:-1]}>')
일단 여기서 c의 경우 0을 의미할 것이고, 나머지는 a에게 1부터 n까지의 값이 포함되어있을 것이다.
{str(
[
a.pop(c:=(c+k-1)%b) for b in a[::-1]
]
)[1:-1]}
1부터 n까지의 숫자가 포함되어있는 리스트 a에서 c라는 변수에 k-1을 더하고 b로 나눈 나머지 값을 index로 사용하는데, for문을 확인해보면 먼저 맨 뒤의 n부터 가져오게 된다.
예를들어 n이 7, k는 3이라면?
c := (0 + 3 - 1) % 7 = 2
c := (2 + 3 - 1) % 6 = 4
...
이런식으로 흘러가게 된다.
인덱스를 조절해서 순서대로 뽑아내는 과정을 거친 뒤 해당 리스트의 전체를 추출하지만 순서가 살짝 바뀌어야 해 1번째부터 추출하게 된다.
반응형
'개인활동 > 코테' 카테고리의 다른 글
백준 2346번 : 풍선 터트리기 (0) | 2024.06.07 |
---|---|
백준 28279번 : 덱2 (0) | 2024.06.05 |
[프로그래머스] 하샤드 수 (1) | 2024.06.03 |
[프로그래머스] 평균 구하기 (0) | 2024.06.01 |
[프로그래머스] 짝수와 홀수 (1) | 2024.06.01 |