<aside> 👉🏿 문제 링크
</aside>
문제 정리
<aside> 👉🏿 정수 n이 주어진다.
1,2,3을 더해 n이 나올 수 있는 방법의 수를 출력하라.
</aside>
# 입력값
3
4
7
10
# 출력값
7
44
274
접근 방법
<aside> 👉🏿 dfs방식으로 탐색을 하다가 조건을 하나 추가해 가지치기를 해나가는 방식으로 진행해보았다.
처음에는 2번 조건을 달지 않았었는데 모든 경우의수가 아닌 중복값을 제거한 경우의 수가 나왔다.
코드 진행
<aside> 👉🏿 먼저 input() 함수를 생성한다.
readline()을 사용한다.
</aside>
import sys
# input보다 효율적인 readline 사용
def input():
return sys.stdin.readline()
<aside> 👉🏿 테스트케이스와 n을 입력받는다.
1,2,3의 리스트와 결과값을 넣을 리스트를 추가해준다.
백트래킹 함수를 호출한다.
</aside>
t = int(input())
for _ in range(t):
n = int(input())
li = [1, 2, 3]
results = []
backtracking(0, [])
print(len(results))
<aside> 👉🏿 인자인 c_sum은 누적 합계이다. 0부터 시작한다.
path는 결과값에 추가할 리스트를 생성한다. [] 빈 리스트 부터 시작한다.
def backtracking(c_sum, path):
# 합계가 n보다 클 경우 가지치기
if c_sum > n:
return
# 합계가 n일 경우 정답 처리
if c_sum == n:
results.append(path)
return
# li를 모두 돌면서 백트래킹
for i in li:
backtracking(c_sum + i, path + [i])