728x90
programmers.co.kr/learn/courses/30/lessons/12902#qna
백준의 이 문제와 똑같다. 밑의 설명을 참고하면 좋을 것 같다.
차이점은 백준 문제는 30까지 구하지만 프로그래머스는 n이 5000까지 존재한다.
따라서 배열에 % 1,000,000,007의 값으로 나눈 나머지 값을 저장해야 한다.
#include <string>
#include <vector>
#define MOD 1000000007
using namespace std;
long long arr[5001];
int solution(int n) {
int answer = 0;
if(n % 2 != 0)
return 0;
arr[0] = 1;
arr[2] = 3;
for(int i = 4 ; i <= n ; i+=2){
arr[i] = (arr[i-2] * 3);
for(int j = 0 ; j <= i-4 ; j += 2){
arr[i] += (arr[j] * 2) % MOD;
}
arr[i] %= MOD;
}
answer = arr[n] % MOD;
return answer;
}
Long long 형으로 바꿔주고 나머지 값을 저장해준다.
728x90
'문제 풀이 > 프로그래머스 알고리즘, SQL' 카테고리의 다른 글
[프로그래머스 LV3] 섬 연결하기 (그리디, 유니온파인드) [C++] (0) | 2021.04.23 |
---|---|
[프로그래머스 LV3] 가장 먼 노드 (BFS) [C++] (0) | 2021.04.10 |
[프로그래머스] 여행경로 (문자열, BFS) [C++] (0) | 2021.03.12 |
[프로그래머스] 등굣길 (DP, DFS) [C++] (0) | 2021.03.12 |
[프로그래머스 SQL] 입양 시각 구하기(2) group by, recursive (0) | 2021.02.26 |