C#/백준 알고리즘
2022.02.06 [백준] C# 파도반 수열
ian's coding
2022. 2. 6. 22:10
728x90
반응형
https://www.acmicpc.net/problem/9461
9461번: 파도반 수열
오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의
www.acmicpc.net
풀이
이 문제는 먼저 수열의 규칙을 찾아야 합니다. 우선 7번째의 삼각형인 4를 보면 2번째의 1과 6번째의 3의 변이 합쳐서 만들어진것을 확인할 수 있습니다. 또한 9번째의 7을 보면 8번째의 5와 4번째의 2가 합쳐져서 7이 되었죠!
그래서 저는 f(n) = f(n-1) + f(n-5)라는 식을 세웠고 이 식을 bottom-up방식을 사용하여 코드를 작성하였습니다.
처음 배열과 리턴형을 int로 해서 계속 틀렸다고 뜨더군요...반례를 못 찾던 중, 100을 넣으니 음수가 나와서 long형식으로 바꿨습니다...ㅜ.ㅜ
구글링 중, f(n) = f(n-2) + f(n-3)이라는 식도 있군요!!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
using System;
using System.Text;
using System.IO;
class Program
{
static long[] num;
static long func(int n)
{
num[0] = 1;
num[1] = 1;
num[2] = 1;
num[3] = 2;
num[4] = 2;
if (n > 4)
{
for (int i = 5; i < n; i++)
{
num[i] = num[i - 1] + num[i - 5];
}
}
return num[n-1];
}
static void Main()
{
StreamReader sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
StreamWriter sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));
StringBuilder sb = new StringBuilder();
int n = int.Parse(sr.ReadLine());
num = new long[101];
for(int i = 0; i < n; i++)
{
int a = int.Parse(sr.ReadLine());
sb.Append(func(a)+"\n");
}
sw.WriteLine(sb.ToString());
sr.Close();
sw.Close();
}
}
|
cs |
728x90
반응형