생각하는 아져씨

[BOJ] 9461 - 파도반 수열 본문

Study/Algorithm

[BOJ] 9461 - 파도반 수열

azeomi 2023. 4. 13. 01:49
9461번: 파도반 수열
https://www.acmicpc.net/problem/9461

문제 정의


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

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

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

접근 방법


규칙을 찾고 점화식을 세우는 다이나믹 프로그래밍을 이용한다.

문제 해설


규칙을 찾으면 N=6부터 점화식을 세울 수 있다.

dp[i] = dp[i-1] + dp[i-5]

풀이


T = int(input())

dp = [0] * 101
dp[:6] = [0, 1, 1, 1, 2, 2]

for i in range(6, 101):
    dp[i] = dp[i-1] + dp[i-5]

for _ in range(T):
    N = int(input())
    print(dp[N])

정리


  • 규칙을 찾는게 중요한 문제이다.


Uploaded by N2T

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

[BOJ] 1717 - 집합의 표현  (0) 2023.04.14
[BOJ] 1149 - 연속합  (1) 2023.04.13
[Programmers] N으로 표현  (0) 2023.04.13
[BOJ] 2805 - 나무 자르기  (1) 2023.04.13
[BOJ] 10816 - 숫자 카드2  (0) 2023.04.11