사용자 도구

사이트 도구


ps:problems:boj:8841

Zgadywanka

ps
링크acmicpc.net/…
출처BOJ
문제 번호8841
문제명Zgadywanka
레벨실버 3
분류

수학

시간복잡도O(T*logn)
인풋사이즈T<=10, n<=1000000
사용한 언어Python 3.13
제출기록32412KB / 36ms
최고기록32ms
해결날짜2025/02/23

풀이

  • 게임이론 태그가 붙어있지만 게임이론과는 관계없다.
  • 기본적으로는 (k+1)분 탐색 아이디어를 쓰면 된다.
  • n개의 후보가 있을때, 한번 탐색하면 k개의 후보를 체크할수 있고, 체크되지 않은 구간을 (k+1)개로 쪼개게 된다. 후보의 개수는 남은 구간중 가장 큰 구간의 크기가 된다. 즉, 한번 연산 후에는 후보의 개수가 n에서 ceil1)가 된다. 이것을 반복 계산하면서 n이 k이하가 될때까지 몇번이나 걸리는지를 세면 된다. 시간복잡도는 O(logn)
  • 위 식을 좀더 정리하면 이것은 그냥 정수나눗셈을 사용해서 n//(k+1) 으로 계산한 것과 똑같다.

코드

"""Solution code for "BOJ 8841. Zgadywanka".

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

Tags: [math]
"""

from teflib import psutils


@psutils.run_n_times
def main():
    N, K = [int(x) for x in input().split()]

    answer = 1
    while N > K:
        N //= K + 1
        answer += 1

    print(answer)


if __name__ == '__main__':
    main()

1)
n-k) / (k+1

토론

댓글을 입력하세요:
R N H U᠎ R
 
ps/problems/boj/8841.txt · 마지막으로 수정됨: 2025/02/23 12:16 저자 teferi