문제
코드
// bj11726.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class BJ9095 {
private:
int testNum;
int *testArr;
int *resultArr;
public:
BJ9095() {
}
~BJ9095() {
delete[] testArr;
}
void SetArr() {
cin >> testNum;
while (testNum < 1 || testNum>10) {
cin >> testNum;
}
testArr = new int[testNum];
resultArr = new int[testNum];
for (int i = 0; i < testNum; i++)
cin>>testArr[i];
}
void PrintArr() {
for (int i = 0; i < testNum; i++) {
cout << resultArr[i]<<endl;
}
}
void SetResult() {
for (int i = 0; i < testNum; i++) {
int* arr;
arr = new int[testArr[i]];
if (testArr[i] == 1) {
arr[0] = 1;
}
else if (testArr[i] == 2) {
arr[0] = 1;
arr[1] = 2;
}
else if (testArr[i] == 3) {
arr[0] = 1;
arr[1] = 2;
arr[2] = 4;
}
else {
arr[0] = 1;
arr[1] = 2;
arr[2] = 4;
for (int j = 3; j < testArr[i]; j++) {
arr[j] = arr[j - 1] + arr[j - 2] + arr[j - 3];
}
}
resultArr[i] = arr[testArr[i] - 1];
delete[] arr;
}
}
};
int main()
{
BJ9095 test;
test.SetArr();
test.SetResult();
test.PrintArr();
return 0;
}
풀이방법
arr[j] = arr[j - 1] + arr[j - 2] + arr[j - 3]
풀이방법은 생각해보면 T[N]을 만들기 위해서는 그전항, 그전전항, 그전전전항에 각가 +1,+2,+3을 하면 되니 이를 이용하여 다이나믹 프로그래밍으로 풀었다.
난이도
하
결과
'알고리즘 > 다이나믹프로그래밍' 카테고리의 다른 글
백준11052 카드 구매하기 (0) | 2019.01.25 |
---|---|
백준10844 쉬운 계단 수 (0) | 2019.01.25 |
백준 11727 2Xn 타일링 2 (2) | 2018.11.07 |
[백준11726번 - 2xn 타일링] (0) | 2018.11.03 |
Dynamic알고리즘[1463번] (0) | 2018.11.02 |