[백준] 1158 - 요세푸스 문제 (Python)

민영·2021년 7월 28일
0

[Algorithm] 백준

목록 보기
6/31
post-thumbnail

문제

https://www.acmicpc.net/problem/1158

제출 코드

import sys

input = sys.stdin.readline().split()
CircularQueue = []
for i in range(int(input[0])): 
    CircularQueue.append(i+1)
    
num = int(input[1])
result = []
index = 0

while len(CircularQueue) != 0:
    index += num - 1

    if index >= len(CircularQueue):
        index = index % len(CircularQueue)

    result.append(CircularQueue.pop(index))

print("<", ', '.join(str(i) for i in result)[:], ">", sep="")

결과


정리

개념

join 함수 : 리스트에 있는 요소들을 하나의 문자열로 바꾸어 반환하는 함수

  • ''.join(리스트)
    : 매개변수로 ['a', 'b', 'c'] 리스트가 들어왔을 때 'abc'의 문자열로 합쳐서 반환

  • '구분자'.join(리스트)
    : 리스트의 요소들 사이에 '구분자'에 들어온 구분자를 넣어서 하나의 문자열로 합쳐서 반환
    ex) '_'.join(['a', 'b', 'c']) 라 하면 "a_b_c" 문자열로 반환

주석있는 코드

import sys

input = sys.stdin.readline().split() # input[0]이 7이고 input[1]이 3
CircularQueue = []
for i in range(int(input[0])): # 큐에 1~7까지 넣기 위한 for문
    CircularQueue.append(i + 1) # i가 0부터 시작이니까 +1해서 리스트에 append

num = int(input[1]) 
result = []
index = 0

while len(CircularQueue) != 0:
    index += num - 1 # 큐의 인덱스는 0부터 시작하니까 -1해줌

    if index >= len(CircularQueue): # 한바퀴 다 돌았을 때 현재 큐(리스트) 길이로 나눠줘서 처음으로 돌아가게 구현
        index = index % len(CircularQueue)

    result.append(CircularQueue.pop(index)) # 큐에서 pop해서 result에 append

print("<", ', '.join(str(i) for i in result)[:], ">", sep="") # 결과 출력

느낀점

생각보다 어려웠던 문제... 마지막 출력을 간결하게 할 수 있는 방법이 있는거 같은데 모르겠어서 구글링해봄ㅎㅋㅋㅋㅋ 찾아보니까 입력받는거도 간결하게 할 수는 있는데 굳이 안바꿨다..ㅎ

profile
그날의 기록

0개의 댓글