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
ps/problems/boj/8841.txt · 마지막으로 수정됨: 2025/02/23 12:16 저자 teferi
토론