[백준] 9095번 1,2,3 더하기
- 알고리즘/백준
- 2020. 4. 6. 22:19
반응형
반응형
문제
정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.
- 1+1+1+1
- 1+1+2
- 1+2+1
- 2+1+1
- 2+2
- 1+3
- 3+1
정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다.
출력
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
내 풀이
#include <bits/stdc++.h>
using namespace std;
int main(void){
int test;
cin >> test;
while (test--) {
int arr[10005] = {0};
int key;
cin >> key;
arr[0] = 1;
arr[1] = 2;
arr[2] = 4;
for(int i = 3; i <key;i++) {
arr[i] = arr[i-1] + arr[i-2] + arr[i-3];
}
cout << arr[key-1] << "\n";
}
}
다른 사람 풀이
#include <bits/stdc++.h>
using namespace std;
int dp[12];
int ans(int n) {
if (n == 1) {
return 1;
} else if (n == 2) {
return 2;
} else if (n == 3){
return 4;
} else if(dp[n]) {
return dp[n];
} else {
return dp[n] = ans(n - 1) + ans(n - 2) + ans(n - 3);
}
}
int main() {
int t, n;
cin >> t;
for (int i = 0; i < t; i++) {
cin >> n;
cout << ans(n) << "\n";
}
}
이분은 재귀로 푸셨다.
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1920번 수 찾기 (0) | 2020.04.07 |
---|---|
[백준] 15719번 중복된 숫자 (0) | 2020.04.07 |
[백준]5691번 평균 중앙값 문제 (0) | 2020.04.04 |
[백준] 2493번 탑 (0) | 2020.04.02 |
[백준] 1158 요세푸스 (list.ver) (0) | 2020.03.31 |