백준 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