https://www.acmicpc.net/problem/14651
14651번: 걷다보니 신천역 삼 (Large)
욱제는 ‘삼’이란 음절을 참 좋아한다. 인삼, 홍삼, 해삼, 삼성, 이춘삼(李春森), 삼식이, 삼시세끼, ㄴㄴ 그거 안 삼, 삼과 죽음, 알았삼, 걷다보니 신천역 삼, 그리고 특히 일이삼을 좋아한다.
www.acmicpc.net
문제 해석
(0, 1, 2 로 만든 N자리 숫자 중에서 3의 배수의 개수)를 1000000009로 나눈 나머지를 출력한다.
코드
import sys
input = sys.stdin.readline
n = int(input())
if n == 1:
print(0)
else:
result = (3 ** (n - 2)) * 2
print(result % 1000000009)
문제 풀이
수학적인 원리가 아닌 규칙을 통해 설명하겠다.
N = 1일 때에는 0, 1, 2이므로 존재하지 않는다.
N = 2일 때의 경우의 수는 2*3 = 6가지, 그 중 3의 배수는 12와 21로 2개이다.
N = 3일 때의 경우의 수는 2*3*3 = 18가지, 그 중 3의 배수는 6개이다.
여기서 우리는 N자리에서의 경우의 수는 2(3**(N-1)), 3의 배수는 2(3**(N-2))를 알 수 있다.
따라서 구하고자 하는 값은 2(3**(N-2))이며, 이를 1000000009로 나누어 주면 된다.
(참고로 N >=19 이면 1000000009를 넘기게 된다.)
'백준' 카테고리의 다른 글
[BOJ/C++] 24417번 알고리즘 수업 - 피보나치 수 2 (0) | 2025.01.08 |
---|---|
[BOJ/python] 2057번 팩토리얼 분해 (1) | 2022.10.25 |
[BOJ/python] 1676번 팩토리얼 0의 개수 (0) | 2022.10.05 |
[BOJ/python] 10826번 피보나치 수 4 (2) | 2022.09.26 |
[BOJ/python] 14729번 칠무해 (0) | 2022.09.26 |