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

·2023년 5월 8일

백준 문제풀이

목록 보기
59/159
post-thumbnail

백준 1158번


최종 제출 코드

n, k = map(int, input().split())
arr = [i+1 for i in range(n)]
result = []

while len(arr) != 0:
    result.append(str(arr[(k-1)%len(arr)]))
    arr = arr[(k-1)%len(arr)+1:] + arr[:(k-1)%len(arr)]

result = "<" + ", ".join(result) + ">"
print(result)

.

◼ 인덱스 슬라이스를 활용하여 문제 풀이

  • k번째 원소를 result 배열에 넣고, arr를 그 원소의 바로 뒤에 있는 원소부터 앞에 있는 원소까지 포함하는 배열로 수정. 그림으로 설명하면 아래와 같다.
  • 인덱스는 매번 업데이트 되기 때문에 k번째 원소를 구하는 식만 세우면 arr 업데이트 가능
  • 간단하게 생각하면 arr[k-1] 원소가 k번째 원소이지만, arr의 길이가 k보다 작을 때는 적용 불가능. arr의 길이를 고려해주어야 한다.
    arr[(k-1)%len(arr)] 원소가 k번째 원소이다.
  • 그림에서 b에 해당하는 부분은 arr[(k-1)%len(arr)+1:], a에 해당하는 부분은 arr[:(k-1)%len(arr)]이다.
    arr[(k-1)%len(arr)+1:] + arr[:(k-1)%len(arr)]가 업데이트 되는 배열이다.
profile
백엔드 개발자가 되고 싶어요(22.8.15~)

0개의 댓글