[백준] 9095번 1,2,3 더하기

반응형
반응형

문제

정수 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

댓글

Designed by JB FACTORY