백준 9461 - 파도반 수열

황재진·2024년 7월 31일

백준

목록 보기
52/54

아래 사진과 같이 삼각형이 마치 피보나치 수열처럼 수가 늘어날 때 n번째 수를 구하는 문제입니다.

6번째 삼각형을 예시로 보면 맞닿아있는 면이 첫번째 삼각형과 4번째 삼각형입니다.

그 이후 삼각형들도 맞닿아있는 면을 보면 이전 삼각형과 5번째 전 삼각형임을 확인할 수 있습니다.

순서
11
21
31
42
52
63tris[n-1] + tris[n-5] (5 + 1)
74tris[n-1] + tris[n-5] (6 + 2)
85tris[n-1] + tris[n-5] (7 + 3)
97tris[n-1] + tris[n-5] (8 + 4)
109tris[n-1] + tris[n-5] (9 + 5)
1112tris[n-1] + tris[n-5] (10 + 6)
1216tris[n-1] + tris[n-5] (11 + 7)

이를 통해 5 이후의 수열은 점화식을 통해 값을 알아낼 수 있습니다.

#include <iostream>
#include <vector>

int main()
{
	int testCnt;
	std::cin >> testCnt;

	std::vector<long long> tris(101);

	tris[1] = 1;
	tris[2] = 1;
	tris[3] = 1;
	tris[4] = 2;
	tris[5] = 2;

	for (int i = 6; i <= 100; i++)
		tris[i] = tris[i - 1] + tris[i - 5];

	for (int t = 0; t < testCnt; t++)
	{
		int num;
		std::cin >> num;

		std::cout << tris[num] << "\n";
	}

	return 0;
}

이외에도 다른 방식으로 점화식을 구할 수 있습니다. 이 글에서는 4번째 삼각형부터 적용 가능하기에 더 일반적이라고 볼 수 있습니다.

profile
프로그래밍, 쉐이더 등 이것저것 다해보는 게임 개발자입니다

0개의 댓글