ps:problems:boj:18291
목차
비요뜨의 징검다리 건너기
ps | |
---|---|
링크 | acmicpc.net/… |
출처 | BOJ |
문제 번호 | 18291 |
문제명 | 비요뜨의 징검다리 건너기 |
레벨 | 골드 5 |
분류 |
조합론 |
시간복잡도 | O(T*logn) |
인풋사이즈 | T<=1000, n<=10^9 |
사용한 언어 | Python 3.11 |
제출기록 | 31256KB / 48ms |
최고기록 | 44ms |
해결날짜 | 2023/02/13 |
풀이
- 1번과 N번 사이에 있는 징검다리를 원하는 만큼 밟고 갈수 있다.
- 따라서 {2, … ,N-1}의 부분집합의 갯수를 구하는 문제가 된다. 답은 2^(N-2) % MOD. 거듭제곱의 빠른 계산 (Exponentiation by squaring)을 이용하면 O(logN)에 구할수 있다.
- N=1일때에는 1을 출력하는 것만 신경써주면 된다
코드
"""Solution code for "BOJ 18291. 비요뜨의 징검다리 건너기".
- Problem link: https://www.acmicpc.net/problem/18291
- Solution link: http://www.teferi.net/ps/problems/boj/18291
"""
import sys
MOD = 10**9 + 7
def main():
T = int(sys.stdin.readline())
for _ in range(T):
N = int(sys.stdin.readline())
print(1 if N == 1 else pow(2, N - 2, MOD))
if __name__ == '__main__':
main()
ps/problems/boj/18291.txt · 마지막으로 수정됨: 2023/02/13 08:16 저자 teferi
토론