문제풀이/백트래킹
[Python/파이썬] 백준 14650번 걷다보니 신천역 삼 (Small)
딜레이레이
2025. 4. 26. 23:37
https://www.acmicpc.net/problem/14650
코드
n = int(input())
answer = 0
def bt(n, chosen):
global answer
if len(chosen) == n:
if sum(chosen) % 3 == 0:
answer += 1
return
start = 1 if len(chosen) == 0 else 0
for i in range(start, 3):
bt(n, chosen+[i])
bt(n, [])
print(answer)
3의 배수는 각 자릿수의 합이 3의 배수라는 것은 수학적 사실이다. 이러한 수학적 사실과 백트래킹 알고리즘을 사용하여 풀었다.
0,1,2 중 N개의 숫자를 중복순열로 만드는 방법을 백트래킹으로 구현했다. 이때, 주의할 점은 첫번째 자리는 0이 올 수 없기 때문에 `start = 1 if len(chosen) == 0 else 0` 0번째 자리의 수는 for문이 1부터 돌도록 했다.