[BOJ-#9461] 파도반 수열

신지·2023년 8월 14일
0

BOJ

목록 보기
12/15

문제

문제 링크
아래 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 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)을 출력한다.


Code

Github 링크

import sys

input = sys.stdin.readline

test_case = int(input().rstrip())

for _ in range(test_case) :
    list_ = [0,1,1,1]
    N = int(input().rstrip())
    for i in range(4, N+1) :
        list_.append(list_[i-3]+list_[i-2])
    print(list_[-1])

코드 설명

공식만 이해하면 코드는 어렵지 않다. 1번 2번 수를 더하면 4번 수가 되고, 2번 3번 수를 더하면 5번 수가 되는 식의 공식이다.

import sys

input = sys.stdin.readline

test_case = int(input().rstrip())

빠른 입력을 받을 수 있도록 input을 선언하고 테스트 케이스의 개수를 받는다.


for _ in range(test_case) :
    list_ = [0,1,1,1]
    N = int(input().rstrip())
    for i in range(4, N+1) :
        list_.append(list_[i-3]+list_[i-2])
    print(list_[-1])

테스트 케이스만큼 for문을 돌린다. list 내에 기본으로 [0,1,1,1]을 넣는다. i를 넣었을 때 편하게 계산하기 위해서 0번째 인덱스에는 0을 넣는다. 이후, i-3번째와 i-2번째 값을 더해 list에 추가한다.


리뷰

공식만 찾으면 코드를 짜는 데는 10분도 안 걸린다. 푸는데 15분도 안 걸린 느낌?...

0개의 댓글