자료구조와 알고리즘/알고리즘

9461 백준 문제풀이 (C언어)

jaewpark 2021. 4. 29. 17:44

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

 

9461번: 파도반 수열

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

www.acmicpc.net

 

 공통적인 문제풀이는 동적계획법으로 구현을 하면 되며, 구조를 제대로 보고 규칙이 어떤 것인지 확인하면 된다.

 여기 문제에서의 규칙은 arr[N] = arr[N - 1] + arr[N - 5] 의 값인 구조인데, 배열로 값을 저장하지 않고, 아래와 같이 구현하였다. long long 으로 한 이유는 arr[N] 값이 int 의 값을 넘어 가기에 이렇게 적게되었다.

 사실 저번의 코드를 보게되니 이번 문제는 쉬웠기에 설명이 중복이 되는 거 같아 이 정도로 마무리 하겠다.

#include <stdio.h>

int main() {
	int T, num, i;
	long long temp;
	scanf("%d", &T);
	while (T <= 100 && T-- > 0)
	{
		long long arr[5] = { 1, 1, 1, 2, 2 };
		scanf("%d", &num);
		if (num <= 5)
			printf("%lld\n", arr[num - 1]);
		else {
			i = 5;
			while (++i <= num) {
				temp = arr[(i - 1) % 5] + arr[(i - 2) % 5];
				arr[(i - 1) % 5] = temp;
			}
			printf("%lld\n", temp);
		}
	}
	return 0;
}

아래는 지금 것보다는 한단계 낮은? 문제임으로 위의 코드가 이해가 안된다면 아래의 글을 보고 오면 될 거 같다.

2021.04.28 - [백준 문제풀이] - 1904 백준 문제풀이 (feat. 동적계획법)

 

1904 백준 문제풀이 (feat. 동적계획법)

https://www.acmicpc.net/problem/1904 1904번: 01타일 지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타

raidho.tistory.com