할껀하고놀자

[백준] 9095번 1, 2, 3 더하기 (DP) 본문

[IT]/백준

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

working_hard 2019. 9. 11. 22:06
728x90

문제 링크입니다.

https://www.acmicpc.net/problem/9095

 

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보다 작다. 출력 각

www.acmicpc.net

1. 처음생각

- 막막..

- 역시 해답은 손코딩이었다. 이전꺼를 어떻게 활용할지만 계속 생각했던 것 같다. 

- dp[n] = dp[n-1] + dp[n-2] + dp[n-3]

#include<iostream>
#include<vector>

using namespace std;

int Solution(int n) {
	if (n == 1)return 1;	// 처리해줌
	if (n == 2)return 2;
	vector<int> dp(n+1,0);
	dp[1] = 1;
	dp[2] = 2;
	dp[3] = 4;
	for (int i = 4; i <= n; i++) {
		dp[i] = (dp[i - 1] + dp[i - 2] + dp[i - 3]) % 10007;	// 아예 넣을 때 나머지를 넣어주자..!
	}
	return dp[n];
}
int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int N;
	cin >> N;
	int x;
	for (int i = 0; i < N; i++) {
		cin >> x;
		cout << Solution(x)<<"\n";
	}
	return 0;
}

- 통과되었다. 슬슬 dp에 자신감이 붙기 시작했다.

'[IT] > 백준' 카테고리의 다른 글

[백준] 9093 단어 뒤집기  (0) 2019.09.20
[백준] 2588번 곱셈  (0) 2019.09.20
[백준] 11727번 2Xn 타일링 2 (DP)  (0) 2019.09.11
[백준] 11726번 2Xn 타일링 (DP)  (0) 2019.09.11
[백준] 1463번 1로 만들기 (DP)  (0) 2019.09.11
Comments