알고리즘

[BOJ] 9461 파도반 수열

졔졔311 2023. 6. 6. 02:56
728x90
반응형

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

 

9461번: 파도반 수열

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

www.acmicpc.net

---------------------------------------------------핵심 알고리즘--------------------------------------------

 

수학(규칙찾기) + dp

 

---------------------------------------------------풀이----------------------------------------------------

 

삼각형을 살펴보면 규칙을 찾을 수 있는데, 5번째 이전 삼각형과 바로 이전 삼각형의 변으로 새로운 삼각형이 만들어진다는 것이다.

따라서, 이 삼각형의 한 변의 값들을 저장할 Pn[] 배열을 만들어

find_Pn() 함수에서 Pn[n]이 이미 존재하면 그 값을,

아니라면 find_Pn(n-5) + find_Pn(n-1)을 Pn[n]에 저장하며 리턴하도록 하였다.

#define FASTIO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <queue>
#include <cmath>
#include <stack>
#include <limits.h>
#include <map>

using namespace std;

long long Pn[101] = {0, };

long long find_Pn(int n){
    if(Pn[n] > 0){
        return Pn[n];
    }
    return Pn[n] = find_Pn(n-5) + find_Pn(n-1);
}

int main(void){
    FASTIO;
    int T;
    cin >> T;
    Pn[1] = Pn[2] = Pn[3] = 1;
    Pn[4] = Pn[5] = 2;
    while(T--){
        int N;
        cin >> N;
        cout << find_Pn(N) << "\n";
    }
    return 0;
}

 

---------------------------------------------------후기----------------------------------------------------

 

간단한 dp 문제.

그런데 바로 틀렸다가 떠서 당황했다. N을 100을 넣어보니 int 범위를 초과해 마이너스 값이 뜨더라,,:(

long long으로 바꿔주니 해결되었다.

이런 int 범위 넘어가서 문제 생기는 문제들 너무 싫다...

728x90
반응형

'알고리즘' 카테고리의 다른 글

[BOJ] 11403 경로 찾기  (0) 2023.06.07
[BOJ] 11047 동전 0  (0) 2023.06.06
[BOJ] 9375 패션왕 신해빈  (0) 2023.06.06
[BOJ] 14940 쉬운 최단거리  (0) 2023.06.06
[BOJ] 11659 구간 합 구하기 4  (0) 2023.06.06