Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 이분탐색
- 그래프
- vector
- stoi
- BFS
- 정렬
- map
- 알고리즘
- 티스토리챌린지
- 배열
- 백트래킹
- Set
- 문자열
- C++
- 우선순위큐
- DFS
- 분할정복
- 유클리드호제법
- priority_queue
- Sort
- 깊이우선탐색
- DP
- N과M
- 프로그래머스
- 최소공배수
- 에라토스테네스의 체
- 백준
- 다이나믹프로그래밍
- int
- 오블완
Archives
- Today
- Total
안녕 세상아,
[프로그래머스/c++] Lv2 멀리 뛰기 본문
https://school.programmers.co.kr/learn/courses/30/lessons/12914
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
피보나치수열과 동일한 규칙이기 때문에 간단하게 dp로 푼다. 이것이 피보나치수열과 동일한 규칙인 것만 알면 푸는 것은 간단하다.
이 문제가 피보나치수열과 동일한 규칙인 이유:
- 효진이가 마지막 칸에 도달하는 방법은 그 직전 칸(1칸) 또는 그 이전 칸(2칸)에서 한 번의 점프로 도달할 수 있음
- n번째 칸에 도달하는 방법의 수는 n-1번째 칸에 도달하는 방법의 수와 n-2번째 칸에 도달하는 방법의 수를 더한 것과 같다. 이는 피보나치 수열의 정의와 동일.
- 즉, dp[n] = dp[n-1] + dp[n-2]가 되는 것
이처럼 이전 두 칸에서 도달하는 방법을 더해 나가는 방식은 피보나치 수열과 동일한 규칙이기 때문에, 이 문제를 피보나치 방식으로 해결할 수 있다.
#include <string>
#include <vector>
using namespace std;
long long solution(int n) {
long long answer = 0;
int dp[2001];
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
//메모리 초과 및 계산 시간 증가 방지
dp[i] = dp[i] % 1234567;
}
answer = dp[n] % 1234567;
return answer;
}
혹시나 나처럼 dp[i] = dp[i] % 1234567 하면 값 바뀌는거 아니야? 하는 사람들을 위해 모듈로 연산의 특징 때문에 그런거라고 하니까...정리도 따로 해놨습니다. 별건 아님..
https://hello-world-cpp.tistory.com/156
'프로그래머스' 카테고리의 다른 글
[프로그래머스/c++] Lv2 영어 끝말잇기 (1) | 2024.09.25 |
---|---|
[프로그래머스/c++] Lv2 N개의 최소공배수 (0) | 2024.09.23 |
[프로그래머스/c++] Lv1 콜라 문제 (1) | 2024.09.21 |
[프로그래머스/c++] Lv2 구명보트 (0) | 2024.09.21 |
[프로그래머스/c++] Lv1 비밀지도 (1) | 2024.09.20 |