반응형
https://www.acmicpc.net/problem/9461
9461번: 파도반 수열
오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의
www.acmicpc.net
- 문제
피보나치 수열과 비슷한 형태의 문제를 해결하는 문제다. 다만, n-1 + n-2가 아니라 n-2 + n-3이다.
- 해설
메모이제이션과 피보나치 수열의 변형을 이용해서 풀면된다.
신경써야 할 점으로는
- 시간 초과
- 자료형
이 있다.
메모이제이션 없이 dfs 느낌으로 풀면 시간초과가 날 수 밖에 없고,
피보나치 수열과 같은 형태의 문제는 n이 100까지만 가더라도 int 자료형으로는 감당할 수 없는 숫자가 나오므로 long이나 long long과 같은 형태를 염두해 두어야 한다.
- 풀이
#include <iostream>
using namespace std;
// else if 말고 else로 했을때 시간초과, long말고 int 했을 때 틀림, 피보나치 수열처럼 증가하게 되면 100까지 가더라도 기하급수적으로 증가하므로, long이나 long long 필요!!!
long triangleMemo[101] = {
0,
1,
1,
};
long triangleLength(int n)
{
if (n < 3)
{
return triangleMemo[n];
}
else if (triangleMemo[n] == 0)
{
triangleMemo[n] = triangleLength(n - 2) + triangleLength(n - 3);
}
return triangleMemo[n];
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, temp;
cin >> N;
for (int i = 0; i < N; i++)
{
cin >> temp;
cout << triangleLength(temp) << '\n';
}
return 0;
}
- 새롭게 알게 된 점
반응형
'Algorithm > Baekjoon BOJ' 카테고리의 다른 글
[백준][C++] 2580: 스도쿠 (2) | 2022.11.08 |
---|---|
[백준][C++] 1912: 연속합 (0) | 2022.11.04 |
[백준][C++] 10773: 제로 (0) | 2022.11.03 |
[백준][C++] 10828: 스택 (0) | 2022.11.03 |
[백준][C++] 2563: 색종이 (0) | 2022.11.02 |