====== Zgadywanka ====== ===== 풀이 ===== * 게임이론 태그가 붙어있지만 게임이론과는 관계없다. * 기본적으로는 (k+1)분 탐색 아이디어를 쓰면 된다. * n개의 후보가 있을때, 한번 탐색하면 k개의 후보를 체크할수 있고, 체크되지 않은 구간을 (k+1)개로 쪼개게 된다. 후보의 개수는 남은 구간중 가장 큰 구간의 크기가 된다. 즉, 한번 연산 후에는 후보의 개수가 n에서 ceil((n-k) / (k+1))가 된다. 이것을 반복 계산하면서 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() {{tag>BOJ ps:problems:boj:실버_3}}