문제

풀이

#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] = 3;
        }
        else {
            m_pArr[0] = 1;
            m_pArr[1] = 3;
            m_pArr[2] = 5;

            i = 3;
            while (i < m_nVal) {
                m_pArr[i] = (m_pArr[i - 1] + 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;
}

풀이방법

끝에 부분이 다른 경우는 이전칸에서 2*1이 들어가는 경우. 전전칸에서 2*2나 1*2로 이루진 것이 들어가는 경우이다.m_pArr[i] = m_pArr[i - 1] + 2 * m_pArr[i - 2]

결과

'알고리즘 > 다이나믹프로그래밍' 카테고리의 다른 글

백준11052 카드 구매하기  (0) 2019.01.25
백준10844 쉬운 계단 수  (0) 2019.01.25
백준 9095번 1,2,3더하기  (0) 2018.11.07
[백준11726번 - 2xn 타일링]  (0) 2018.11.03
Dynamic알고리즘[1463번]  (0) 2018.11.02

+ Recent posts