
규칙성을 찾아야 하는 문제입니다.

위 사진은 제가 직접 경우의 수를 세서 규칙성을 찾을려고 그린 그림입니다. 최대한 이전 것들과의 관계에 집중하면서 그리다보니 이전 수에서 | 이렇게 생긴걸 추가하고 두번째 이전 수에서 =이렇게 생긴걸 추가하니 현재 칸에서 만들 수 있는 모든 경우의 수가 만들어짐을 찾았습니다.
즉, arr[n] = arr[n-1] + arr[n-2] 입니다. 1번과 2번은 그 이전이 다 있지 않기에 직접 넣어줘야 합니다.
#include <iostream>
#include <vector>
int main()
{
int n;
std::cin >> n;
std::vector<int> nums(n + 1);
nums[1] = 1;
nums[2] = 2;
for (int i = 3; i <= n; i++)
{
nums[i] += (nums[i - 1] + nums[i - 2]) % 10007;
}
std::cout << nums[n];
return 0;
}