[백준] 11866번 요세푸스 문제 0 (Python)

2021. 3. 16. 15:20·알고리즘/백준
728x90
반응형

문제

 

www.acmicpc.net/problem/11866

 

11866번: 요세푸스 문제 0

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)

www.acmicpc.net

 

코드

N, K = map(int,(input().split()))

josephus = [i for i in range(1,N+1)]
result = []
l = len(josephus)
plus = K                        # 더해주는 값은 고정이므로 변하지 않게 따로 저장해둠

while josephus:                 # 1,2,3,4,5,6,7 일때 K=7일때 7을 빼야하므로 나머지 연산해서 0인경우는 7에 값을 계속 가지고 있게 만들어준다.
    if K % len(josephus) == 0:  # K 값은 인덱스 값이 아니므로 0이 되면 안된다. ex) 5, 6, 7 이 있을때 3인 값을 뽑고 싶다고 하면 index로 2인 7인 값을 뽑아줘야 하는데 나머지 연산으로 0이 되기 때문에 나머지 연산이 0인경우는 그대로 K의 값을 유지할 수 있게해준다.
        K = len(josephus)
    else:
        K = K % len(josephus)   # K를 한번 돌때마다 plus값을 더해 줄거기 때문에 길이를 벗어나면 다시 0부터 시작할 수 있도록 나머지 연산을 해준다.
    K = K-1                     # K=3일때 인덱스값으로는 2인 인덱스를 빼야하기 때문에 -1을 해준다.
    result.append(josephus.pop(K))
    K = K + plus                # K값에서 계속 진행하기위해서 K값에 plus 값을 더해준다.

print('<'+', '.join(map(str,result))+'>')

 

코드설명

N, K를 입력 받아서 1부터 N까지의 수를 K번째를 제거하면서 수열을 만드는 문제이다.

 

1,2,3,4,5,6,7 에서 K=3 일때, 인덱스 자리 2인 3을 제거하므로 K-1이 인덱스 값이된다.

그리고 제거한 자리에서부터 다시 K를 더해 제거하기 때문에 josephus길이로 나머지 연산을해 범위값을 벗어나지 않게 해준다.

 

그런데 예외처리로 K % len(josephus) == 0 일경우 K=0이 아니라 그 값 그대로 가지고 있어야한다.

K는 인덱스값이 아니고 K-1이 인덱스 값이기 때문에 K가 0이되면 안되고 제일 작은 값이 1이 되야한다. 그리고 마지막값을 가르킬려면 K=len(josephus)에 값을 가지고 있어야하기 때문에 나머지 연산이 0일경우 나눠준 값으로 만들어준다.

 

join을 통해 result를 출력해준다.

 

반응형
저작자표시 (새창열림)

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 2309번, 일곱난쟁이 (Python)  (0) 2021.07.02
[백준] 1992번 쿼드트리 (Python)  (0) 2021.03.16
[백준] 1541번 잃어버린 괄호 (Python)  (0) 2021.03.16
[백준] 2231번 분해합 (Python)  (0) 2021.03.15
[백준] 2798번 블랙잭 (Python)  (1) 2021.03.15
'알고리즘/백준' 카테고리의 다른 글
  • [백준] 2309번, 일곱난쟁이 (Python)
  • [백준] 1992번 쿼드트리 (Python)
  • [백준] 1541번 잃어버린 괄호 (Python)
  • [백준] 2231번 분해합 (Python)
wookcode
wookcode
공부한 내용들을 정리하고 기록하는 블로그입니다.
    반응형
  • wookcode
    wookcode
    wookcode
  • 전체
    오늘
    어제
    • 카테고리 (196)
      • study (1)
        • 아파치 카프카 애플리케이션 프로그래밍 with 자.. (0)
        • 인프런 (1)
      • Live Study (15)
      • Programming (14)
        • Java (8)
        • Python (1)
        • Springboot (5)
        • MSA (0)
      • 알고리즘 (117)
        • 백준 (58)
        • 프로그래머스 (59)
      • 에러로그 (5)
      • 항해99 (23)
      • 면접 (1)
      • 프로젝트 (1)
      • CS (19)
        • 네트워크 (2)
        • 운영체제 (2)
        • 데이터베이스 (2)
        • 컴퓨터구조 (1)
        • Java (8)
        • Spring (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩테스트
    김영한
    jpa
    파이썬
    스파르타코딩클럽
    해결
    브루트포스
    spring
    알고리즘
    미니프로젝트
    에러
    그리디
    백준
    항해99
    조합
    java
    orm
    후기
    회고
    버그
    SpringBoot
    SFlash
    카카오인턴
    항해마켓
    정리
    프로그래머스
    실전프로젝트
    괄호
    카카오코딩테스트
    인프런
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
wookcode
[백준] 11866번 요세푸스 문제 0 (Python)
상단으로

티스토리툴바