본문 바로가기

알고리즘 문제

[C/C++ 백준 9461번] 파도반 수열 (Silver 3)

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

 

9461번: 파도반 수열

문제 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 길이를 k라 했을 때, 그 변에 길이가 k인 정삼각형을 추가한다. 파도반 수열 P(N)은 나선에 있는 정삼각형의 변의 길이이다. P(1)부터 P(10)까지 첫 10개 숫자는 1, 1, 1, 2, 2, 3, 4, 5, 7, 9이다. N이 주어졌을 때, P(N)을 구하

www.acmicpc.net

실버 3이라 그런지 정말 쉽다. 삼각형을 보다 보면 N번째 삼각형의 변의 길이는 N-1번째와 N-5번째 삼각형의 길이를 합한 것임을 눈치챌 수 있다.

 

다만, 100번째 삼각형의 변의 길이는 int형의 범위를 넘음에 주의하자. 배열의 자료형을 long long int로 선언하면 해결 된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
long long N[101]={1,1,1,2,2,3,4,5,7,9,};
 
int main(void){
    for(int i=10; i<101; i++){
        N[i]=N[i-1]+N[i-5];
    }    
    int T;
    scanf("%d",&T); 
    int test;
    for(int j=0; j<T; j++){
        scanf(" %d",&test);
        printf("%lld\n",N[test-1]);
    }
}