코드
풀이1
#include <iostream>
using namespace std;
class bj11726{
private:
int m_nVal;
int* m_pArr;
public:
bj11726() {
}
bj11726(int& val) {
while (val > 1 || val > 1000) {
cin >> val;
}
m_nVal = val;
m_pArr = new int[m_nVal];
}
~bj11726() {
delete[] m_pArr;
}
void SetVal() {
cin >> m_nVal;
while (m_nVal < 1 || m_nVal > 1000) {
cin >> m_nVal;
}
m_pArr = new int[m_nVal];
}
void SetArr() {
int i = 0;
if (m_nVal == 1) m_pArr[0] = 1;
else if (m_nVal == 2) {
m_pArr[0] = 1;
m_pArr[1] = 2;
}
else {
m_pArr[0] = 1;
m_pArr[1] = 2;
m_pArr[2] = 3;
i = 3;
while (i < m_nVal) {
m_pArr[i] = (m_pArr[i - 1]+m_pArr[i-2])%10007 ;
i++;
}
}
}
void printResult() {
cout << m_pArr[m_nVal-1];
}
};
int main()
{
bj11726 ex;
ex.SetVal();
ex.SetArr();
ex.printResult();
return 0;
}
그냥 넘어가기 아쉬워서...T[N]=T[N-1]+T[N-2]=T[N-2]+T[N-3]+T[N-2]=2T[N-2]+T[N-3]을 증명
// bj11726.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class bj11726{
private:
int m_nVal;
int* m_pArr;
public:
bj11726() {
}
bj11726(int& val) {
while (val > 1 || val > 1000) {
cin >> val;
}
m_nVal = val;
m_pArr = new int[m_nVal];
}
~bj11726() {
delete[] m_pArr;
}
void SetVal() {
cin >> m_nVal;
while (m_nVal < 1 || m_nVal > 1000) {
cin >> m_nVal;
}
m_pArr = new int[m_nVal];
}
void SetArr() {
int i = 0;
if (m_nVal == 1) m_pArr[0] = 1;
else if (m_nVal == 2) {
m_pArr[0] = 1;
m_pArr[1] = 2;
}
else {
m_pArr[0] = 1;
m_pArr[1] = 2;
m_pArr[2] = 3;
i = 3;
while (i < m_nVal) {
m_pArr[i] = (m_pArr[i - 3]+2*m_pArr[i-2])%10007 ;
i++;
}
}
}
void printResult() {
cout << m_pArr[m_nVal-1];
}
};
int main()
{
bj11726 ex;
ex.SetVal();
ex.SetArr();
ex.printResult();
return 0;
}
결과
실수한점
뒤에 런타임 에러로 인해 백준 사이트에서 100007로 나머지를 구하라 하였는데 귀찮아서 안했다가 두번이나 틀렸다...
'알고리즘 > 다이나믹프로그래밍' 카테고리의 다른 글
| 백준11052 카드 구매하기 (0) | 2019.01.25 |
|---|---|
| 백준10844 쉬운 계단 수 (0) | 2019.01.25 |
| 백준 11727 2Xn 타일링 2 (2) | 2018.11.07 |
| 백준 9095번 1,2,3더하기 (0) | 2018.11.07 |
| Dynamic알고리즘[1463번] (0) | 2018.11.02 |