문제:

위 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 길이를 k라 했을 때, 그 변에 길이가 k인 정삼각형을 추가한다.

파도반 수열 P(N)은 나선에 있는 정삼각형의 변의 길이이다. P(1)부터 P(10)까지 첫 10개 숫자는 1,1,1,2,2,3,4,5,7,9이다.

N이 주어졌을 때, P(N)을 구하는 프로그램을 작성하시오.


입력:

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, N이 주어진다. (1<=N<=100)

출력:

각 테스트 케이스마다 P(N)을 출력한다.

풀이 방법:

수열 문제이므로 규칙을 찾는 것이 가장 중요하다. 파도반 수열은 다음과 같은 규칙을 가지고 있다.

P(N)=P(N-2)+P(N-3)

따라서 이를 처음에는 피보나치와 같이 재귀적 방법으로 풀려고 했으나 시간초과가 발생하게 되었다. 그래서 미리 길이 N의 배열을 만들어 놓고 반복문으로 배열의 인덱스를 참조하며 P(N)을 구하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for i in range(int(input())):
    number=int(input())
    answer=[0]*(number+1)
    if number==1 or number==2 or number==3:
        print(1)
    elif number==4:
        print(2)
    else:
        answer[1]=1
        answer[2]=1
        answer[3]=1
        answer[4]=2
        for i in range(5,number+1):
            answer[i]=answer[i-3]+answer[i-2]
        print(answer[number])
cs


'Algorithm > Python' 카테고리의 다른 글

[BOJ]2193. 이친수  (0) 2019.04.30
[BOJ]1003. 피보나치 함수  (0) 2019.04.26
[BOJ]9095. 1,2,3 더하기  (0) 2019.04.24
[BOJ]11052. 카드 구매하기  (0) 2019.04.23
[BOJ]10844. 쉬운 계단 수  (0) 2019.04.22

+ Recent posts