[Programmers] - 2 x n 타일링
문제
문제를 보자마자 수학적 문제인 것을 알았다.
피보나치 문제이다.
하지만 n의 수가 60000 이하인 것을 봤을 때
메모이제이션 문제이다.
코드
#include <string>
#include <array>
using namespace std;
int solution(int n) {
array<int, 60001> memoi = {0, 1, 2};
int answer = 0;
for (int i = 0; i <= n; i++) {
memoi[i] = memoi[i - 1] + memoi[i - 2];
memoi[i] %= 1000000007;
}
return memoi[n];
}
요약
- 예전 memoization을 공부해서 알기만 해놓으면 쉬운 문제이다.
- 재귀를 이용한 피보나치는 크기가 커질 수록 재귀의 크기가 엄청 커지므로
- 배열을 이용해 값만 저장하면 재귀 없이도 가능하다.