티스토리 뷰

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

 

9461번: 파도반 수열

문제 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 �

www.acmicpc.net

다이나믹 프로그래밍 C++

접근방법

문제에 떡하니 피보나치 같은 규칙을 찾아서 풀으라고 써있어서

그렇게 풀었다. 사실 그림만 보면 p[i] = p[i-1] + p[i-5] 가 맞지만

p[i-2] + p[i-3] 으로 제출해도 맞다.

처음엔 불필요한 계산을 최대한 안하려고 (동적계획법이니까)

변수도 더 쓰고 처리도 더 했었는데 그런거 다 안해도

통과되길래 그냥 다 지우고 최대한 간결하게 제출했다.

 

소스코드

#include <iostream>
using namespace std;

int main(){
    int c, n;
    cin >> c;
    
    long p[101] = {0,1,1,0,};
    for(int k = 0 ; k < c ; k++){
        cin >> n;
        for(int i = 3; i <= n ; i++){
            p[i] = p[i-2] + p[i-3];
        }
        cout << p[n] << "\n";
    }
    return 0;
}
댓글
댓글쓰기 폼