728x90
● [문제번호 9095] 1, 2, 3 더하기
https://www.acmicpc.net/problem/9095
9095번: 1, 2, 3 더하기
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
www.acmicpc.net
● 알아야 할 것
: DP 문제집에 있는 문제
https://pirateturtle.tistory.com/202
● 풀이 과정
: DP의 풀이과정 (Bottom - Up)
1. 테이블 정의하기
→ 각 index의 값은 1, 2, 3의 합으로 나타내는 방법의 수를 나타낸다.
2. 점화식 찾기
→ dp[index] = dp[index - 1] + dp[index - 2] + dp[index - 3]
dp[index]는
dp[index - 1] 에서 구한 각 방법에 1을 추가하면 되는 것과
dp[index - 2] 에서 구한 각 방법에 2을 추가하면 되는 것과
dp[index - 3] 에서 구한 각 방법에 3을 추가하면 되는 것의 합이다.
3. 초기값 정하기
dp[1] = 1
→ (1)
dp[2] = 2
→ (1+1) / (2)
dp[3] = 4
→ (1+1+1) / (1+2) / (2+1) / (3)
● 주의 할 것
: 매 n값을 입력받을 때마다 DP를 실행하는 건 비효율적일 것 같았다.
그리고 n의 값이 최대 10까지 주어진다고 해서 미리 모든 케이스의 값을 구하였다.
● 참고 할 것
: NULL
● 풀이 코드
#include <bits/stdc++.h>
using namespace std;
// DP의 테이블
vector<int> dp;
int T;
// DP 테이블 만드는 함수
void make_dp()
{
// n은 최대 10개 이므로 11개의 할당 (0 index 사용은 선택적)
dp.assign(11, 0);
// 초기값
dp[1] = 1;
dp[2] = 2;
dp[3] = 4;
// 점화식으로 구한다
for(int i = 4; i < 11; i++)
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3];
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// 입력
cin >> T;
// DP 테이블 만드는 함수
make_dp();
// 구하고자하는 방법의 수를 바로 출력
for(int t = 0; t < T; t++)
{
int n;
cin >> n;
cout << dp[n] << "\n";
}
return 0;
}
● [백준] - [알고리즘 기초 2/2] - [530 - 브루트 포스 - 재귀] 문제집
번호 | 문제 번호 | 문제 이름 | 풀이 링크 |
1 | 9095 | 1, 2, 3 더하기 | https://pirateturtle.tistory.com/258 |
2 | 1759 | 암호 만들기 | https://pirateturtle.tistory.com/259 |
3 | 14501 | 퇴사 | https://pirateturtle.tistory.com/260 |
4 | 14889 | 스타트와 링크 | https://pirateturtle.tistory.com/261 |
5 | 15661 | 링크와 스타트 | https://pirateturtle.tistory.com/262 |
6 | 2529 | 부등호 | https://pirateturtle.tistory.com/263 |
7 | 1248 | 맞춰봐 | https://pirateturtle.tistory.com/264 |
728x90
'Baekjoon > [Code.plus] 알고리즘 기초 2/2' 카테고리의 다른 글
[BOJ/백준] 14889 스타트와 링크 (0) | 2021.09.09 |
---|---|
[BOJ/백준] 14501 퇴사 (0) | 2021.09.09 |
[BOJ/백준] 1759 암호 만들기 (0) | 2021.09.09 |
[BOJ/백준] 15666 N과 M (12) (0) | 2021.09.08 |
[BOJ/백준] 15665 N과 M (11) (0) | 2021.09.08 |
[BOJ/백준] 15664 N과 M (10) (0) | 2021.09.08 |
[BOJ/백준] 15663 N과 M (9) (0) | 2021.09.08 |
댓글