목차

마지막 요세푸스 문제

ps
링크acmicpc.net/…
출처BOJ
문제 번호1179
문제명마지막 요세푸스 문제
레벨플래티넘 4
분류

요세푸스문제

시간복잡도O(klogn)
인풋사이즈k<=90, n<=10^15
사용한 언어Python
제출기록31480KB / 64ms
최고기록56ms
해결날짜2021/08/06

풀이

코드

"""Solution code for "BOJ 1179. 마지막 요세푸스 문제".

- Problem link: https://www.acmicpc.net/problem/1179
- Solution link: http://www.teferi.net/ps/problems/boj/1179

Tags: [JosephusProblem]
"""

import sys


def josephus(n, k):
    def _josephus(n):
        if n == 1:
            return 0
        if k > n:
            return (_josephus(n - 1) + k) % n    
        res = _josephus(n - n // k) - n % k
        return res + (n if res < 0 else res // (k - 1))
    
    return (n if k == 1 else _josephus(n) + 1)


def main():
    sys.setrecursionlimit(10**6)
    N, K = [int(x) for x in input().split()]
    print(josephus(N, K))


if __name__ == '__main__':
    main()