728x90
https://www.acmicpc.net/problem/9461
문제 풀이
수열을 찾는 문제이다.
P(n) | 변의 길이 | 계산식 |
P(1) | 1 | - |
P(2) | 1 | - |
P(3) | 1 | - |
P(4) | 2 | P(1) + P(2) |
P(5) | 2 | P(2) + P(3) |
P(6) | 3 | P(3) + P(4) |
P(7) | 4 | P(4) + P(5) |
P(8) | 5 | P(5) + P(6) |
P(9) | 7 | P(6) + P(7) |
표에서 확인 가능한 것처럼 P(n) = P(n-3) + P(n-2)이다. 자세하게 들여다보면 규칙을 쉽게 찾을 수 있다.
중요한 것은 연산을 이어나가다 보면 값이 엄청나게 커지는데 int 형으로는 잘못된 값이 나온다. 따라서 long long형으로 출력할 수 있는 값의 범위를 넓혀줘야 한다.
느낀 점
이 단계에서는 계속적으로 재귀 호출 시에 발생하는 시간 문제를 강조하고 있다. 이 점만 잘 숙지하면 될 것 같다.
코드
#include <iostream>
using namespace std;
long long arr[101] = { 1,1,1, };
long long p(int n) {
if (n == 1 || n == 2 || n == 3) return arr[n - 1];
else if (arr[n - 1] == 0) arr[n - 1] = p(n - 3) + p(n - 2);
return arr[n-1];
}
int main() {
int t, tmp;
cin >> t;
for (int i = 0; i < t; i++) {
cin >> tmp;
cout << p(tmp) << "\n";
}
}
'문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[C++] 백준 1932번 : 정수 삼각형 (0) | 2021.06.02 |
---|---|
[C++] 백준 1149번 : RGB거리 (0) | 2021.06.01 |
[C++] 백준 1904번 : 01타일 (0) | 2021.05.29 |
[C++] 백준 9184번 : 신나는 함수 실행 (0) | 2021.05.28 |
[C++] 백준 1003번 : 피보나치 함수 (0) | 2021.05.28 |
댓글