해설
대표적인 dp 유형이다.
효진이가 n번째 칸에 도달할 때, 다음과 같은 두가지 방법이 가능하다.
1. n-1번째 칸까지 뛰고 마지막 한칸을 뛰어 n번째 칸에 도달하는 방법
2. n-2번째 칸까지 뛰고 마지막에 두칸을 뛰어 n번째 칸에 도달하는 방법
따라서, dp[n]을 n번째 칸까지 뛰는 경우의 수라고 할 때,
dp[n] = dp[n-1](n-1번쨰 칸까지 도달하는 경우의 수) + dp[n-2](n-2번째 칸까지 도달하는 경우의 수)로 점화식을 세울 수 있다.
초항 dp[1] = 1, dp[2] = 2를 설정해주고, dp[i]를 구할 때마다 1234567로 나눈 나머지를 저장한다.
이후, dp[n]을 리턴하면 정답이다.
코드
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <tuple>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <iostream>
using namespace std;
using ii = pair<int, int>;
using iii = tuple<int, int, int>;
#define X first
#define Y second
long long solution(int n) {
long long dp[2005] = {0};
dp[1] = 1; dp[2] = 2;
for (int i=3; i<=n; i++)
dp[i] = (dp[i-1]+dp[i-2])%1234567;
return dp[n];
}
'대딩 > 프로그래머스풀이' 카테고리의 다른 글
[프로그래머스 lv2] 프린터 풀이 (0) | 2022.08.10 |
---|---|
[프로그래머스 lv2] 위장 풀이 (0) | 2022.08.10 |
[프로그래머스 lv2] 전화번호 목록 풀이 (0) | 2022.08.10 |
[프로그래머스 lv2] 방문 길이 풀이 (0) | 2022.08.10 |
[프로그래머스 lv2] 기능개발 풀이 (0) | 2022.08.09 |
댓글