[Algorithm] 백준 1158 - 요세푸스 문제 in Python(파이썬)

하이초·2022년 7월 19일
0

Algorithm

목록 보기
25/94
post-thumbnail

💡 백준 1158:

큐 기본 구조 활용

🌱 코드 in Python

알고리즘: 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)+">") 이와 같이
",(쉼표)"가 아닌 +로 이어주면 새로운 공백이 추가되지 않는다


🧠 기억하자

  1. 출력 형태를 잘 보자 ^^!

  2. join함수 잘 알아두기
    - print 사용법이 아주 무궁무진하구만.. 놀라운 파이썬..

백준 1158 바로가기

profile
개발국대가 되는 그 날까지. 지금은 개발 응애.

0개의 댓글