[BOJ] 1158: 요세푸스 문제

이슬비·2022년 3월 28일
0

Algorithm

목록 보기
22/110
post-thumbnail

오... 오늘 문제는 꽤나 생각했어야 했다... 그리고 나는 생각을 못했다. ^^

1158: 요세푸스 문제

1. 다른 풀이

N,K = map(int,input().split())
arr = list(range(1,N+1))

answer = [] 
num = 0 

for t in range(N):
    num += K-1  
    if num >= len(arr):
        num = num%len(arr)
 
    answer.append(str(arr.pop(num)))
print("<",", ".join(answer)[:],">", sep='')

해당 문제는 아래의 블로그를 참고했다.
(출처: https://infinitt.tistory.com/213)

풀이를 분석 아닌 분석을 해보자면...!

  • 먼저 N과 K를 map 함수를 이용해서 할당해준다.
  • list와 range 함수를 이용해 배열을 만들어준다.
  • 답을 넣을 리스트를 만들어준다.
  • N만큼 for문을 돌려준다.
  • 이때 num에 K-1을 더해준다.
    만약 이 num이 arr의 length보다 크면, num에 num에서 len(arr)을 나눈 나머지를 할당해준다.
  • 그 후 append를 이용해 answer에 num 인덱스의 arr 값을 넣어준다.
  • 그리고 print까지!

막상 보니 별 거 아니구만... 앞으로는 좀 더 차근히 생각하는 힘과 인내를 길러야긋다...

오늘도 신기한 알고리즘의 세계 끝!

profile
정말 알아?

1개의 댓글

comment-user-thumbnail
2022년 4월 3일

멋있어요^^

답글 달기