728x90
반응형
https://www.acmicpc.net/problem/9095
9095번: 1, 2, 3 더하기
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
www.acmicpc.net
풀이
다음 문제는 1,2,3을 더해서 n을 만들 수 있는 가지 수를 구하는 문제이다.
1,2,3이 중복해서 사용해도 되고, 갯수 제한이 없다. 그래서 dfs를 이용하여 코드를 작성했다.
for문안에 cnt배열을 만들어 각 케이스를 실행할 때, 초기화 되도록 만들었다.
dfs함수는 sum==target이면 cnt[target]가 카운팅된다. 그리고 만약 sum>target이면 범위를 넘었기 때문에 return시켜준다. 아래의 코드를 각 상황마다 배열을 초기화시켜주고 dfs함수를 돌린다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import sys
sys.setrecursionlimit(10**6)
def dfs(sum,target,cnt):
num=[1,2,3]
if sum==target:
cnt[target]+=1
return
elif sum>target:
return
for i in num:
dfs(sum+i,target,cnt)
for i in range(int(input())):
cnt = [0] * 11
n=int(input())
dfs(0,n,cnt)
print(cnt[n])
|
cs |
아래의 코드는 위의 코드와 거의 동일하지만 문제에서 n이 11미만으로 범위가 좁기 때문에 전체 범위까지 dfs함수를 이용해 만들 수 있는 가지수를 저장하고 for문을 돌려 각 테스트케이스를 만들 수 있는 가지수를 바로 배열에서 출력했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import sys
sys.setrecursionlimit(10**6)
def dfs(sum,target,cnt):
num=[1,2,3]
if sum>target:
return
cnt[sum]+=1
for i in num:
dfs(sum+i,target,cnt)
cnt = [0] * 11
dfs(0,10,cnt)
for i in range(int(input())):
n=int(input())
print(cnt[n])
|
cs |
728x90
반응형
'Python3 > 백준 알고리즘' 카테고리의 다른 글
2022.03.05 [백준] (python 파이썬) ATM (0) | 2022.03.05 |
---|---|
2022.03.03 [백준] (python 파이썬) 경비원 (0) | 2022.03.03 |
2022.02.28 [백준] (python 파이썬) 다음 순열 (0) | 2022.02.28 |
2022.02.28 [백준] (python 파이썬) 암호 만들기 (0) | 2022.02.28 |
2022.02.28 [백준] (python 파이썬) 이항 계수 2 (0) | 2022.02.28 |
댓글