IT/Problem Solving
백준 9461 - 파도반 수열
이녀기
2021. 1. 28. 19:49
9461번: 파도반 수열
오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의
www.acmicpc.net
그려보면서 일반화했는데, 틀렸다고 나와서 예외를 찾느라 시간을 소모했다. integer 범위를 넘어가서 문제가 생긴걸 확인하곤 고쳐서 금방 풀었다.
문제)
나선 모양으로 놓인 삼각형의 변의 길이를 구하여라. 놓인 삼각형 중 가장 긴 변에 그 변의 길이를 한 변의 길이로 하는 삼각형을 놓는다.
(1<=N<=100)
풀이)
DP로 풀면 된다. 단, dp[99]까지 출력해보면 알겠지만 integer 표현범위를 넘어간다. 따라서 long long (int)를 사용하여야 오버플로 발생을 막을 수 있다.
C 코드)
#include <stdio.h>
int N, T;
long long int dp[100];
int main() {
dp[0] = 1;
dp[1] = 1;
dp[2] = 1;
dp[3] = 2;
dp[4] = 2;
for(int i=5;i<100;i++) {
dp[i] = dp[i-5] + dp[i-1];
}
scanf("%d", &T);
for(int i=0;i<T;i++) {
scanf("%d", &N);
printf("%lld\n", dp[N-1]);
}
}