본문 바로가기
백준

[9461] 파도반 수열

by kmyobin 2022. 10. 30.


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

 

9461번: 파도반 수열

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

www.acmicpc.net

지독하게 실버만 패는 사람,,

 

 

이 문제는 DP + 수학이 섞여 있는 문제이다. 

나선형으로 돌아가는 형식이라 규칙이 있을 것이라 생각하고 직접 그려보며 문제를 풀었다.

P(9)부터 규칙이 존재함을 발견했다. 

A[i] = A[i - 1] + A[i - 5];

바로 그 전 값(i-1)과, 5번째 전에 있던 값(i-5)의 합이 현재 i의 값임을 알아냈다.

 

 

근데 그냥 했더니 틀렸다.

알고보니 int형이라 overflow가 난 것이었다.

 

그래서 int -> unsigned long long int로 바꿔주었더니 해결됐다.

아래는 전체 코드이다.

#include <iostream>
using namespace std;

unsigned long long int A[101] = { 0,1,1,1,2,2,3,4,5, }; // 초기 값 설정

void dp() {
	for (int i = 9; i <= 100; i++) {
		A[i] = A[i - 1] + A[i - 5];
	}
}

int T, N;
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	dp();

	cin >> T;

	for (int i = 0; i < T; i++)
	{
		cin >> N;
		cout << A[N] << endl;
	}
}

'백준' 카테고리의 다른 글

[2156] 포도주 시식  (0) 2022.10.31
[2579] 계단 오르기  (0) 2022.10.31
[11659] 구간 합 구하기 4  (0) 2022.10.10
[3190] 뱀  (0) 2022.10.05
[11664] 선분과 점  (0) 2022.10.02

댓글