큐 기본 구조 활용
알고리즘: Queue
import sys
n, k = map(int, sys.stdin.readline().split())
people = [i + 1 for i in range(n)]
ret = []
i = 0
while people:
i = (i + k - 1) % len(people) # k번째 인덱스 선별
ret.append(str(people.pop(i))) # 문자열 변환하여 append
print("<",', '.join(ret),">", sep="") # join함수 사용하여 출력 형태 만들기
이번 문제는 요세푸스 배열 문제로 원형 큐를 통해 풀 수 있는 문제였다
원형 배열을 계속 순환하며 k번째 인덱스를 선별하여 추출하면 된다
이 문제는 문제 자체보다.. 출력 형태가 함정이어따.. ㅎ(나만..?)
아니.. 갑자기 꺽쇄랑 쉼표 먼데.. 😥
아무튼 이 문제를 통해 join 함수를 처음 써보았는데..
'구분자'.join(list)
위 형태의 join 함수는 리스트의 값과 값 사이에 구분자를 넣어서 합쳐준다
예를 들어 [a, b, c]와 같은 리스트가 있을 경우
"".join(list)
= abc
'_'.join(list)
= a_b_c
와 같은 결과가 나오는 것이다
마지막으로 sep의 경우 join의 구분자와 같은 역할을 하는데 여기서 sep을 넣지 않으면
<, > 이 꺽쇄 앞 뒤로 공백이 추가되어 문제에서 요구하는 출력형태가 나오지 않는다
따라서 sep=""을 통해 문장 전체에 대한 공백은 없애고, join함수에서 쉼표뒤에 공백을 넣어 예제 출력과 동일하게 만든다
만약 sep을 쓰지 않는다면, 문장을 이어줄 때 print("<"+', '.join(ret)+">")
이와 같이
",(쉼표)"가 아닌 +로 이어주면 새로운 공백이 추가되지 않는다
출력 형태를 잘 보자 ^^!
join함수 잘 알아두기
- print 사용법이 아주 무궁무진하구만.. 놀라운 파이썬..