[Codility] Fib Frog
[Codility] Fib Frog
해결전략
피보나치 Fibonacci
다이나믹 프로그래밍 Dynamic Programming
정답코드
#include <algorithm>
#include <vector>
using namespace std;
const int INT_MAX = 2147000000;
vector<int> fib;
void Fibonacci(int k)
{
fib.push_back(0);
fib.push_back(1);
while (fib.back() < k) {
fib.push_back(fib.end()[-1] + fib.end()[-2]);
}
}
int solution(vector<int> &A) {
int n = A.size();
A.insert(A.begin(), 1); // 개구리가 시작하는 강둑
A.push_back(1); // 개구리가 도착하는 강둑
Fibonacci(n+2);
vector<int> jumps(n+2, -1);
jumps[0] = 0;
for (int i = 1; i < n+2; i++) // 각 위치에서의 최소 점프를 구하기
{
if (A[i] == 0) continue;
int min_jump = INT_MAX;
for (const auto& iter : fib)
{
if (iter > i) break;
if (jumps[i-iter] != -1) {
min_jump = min(min_jump, jumps[i-iter] + 1);
}
}
if (min_jump != INT_MAX) {
jumps[i] = min_jump;
}
}
return jumps[n+1];
}
#include <algorithm>
#include <vector>
using namespace std;
const int INT_MAX = 2147000000;
vector<int> fib;
// 피보나치 수열을 생성하는 함수
void Fibonacci(int k)
{
fib.push_back(0);
fib.push_back(1);
while (fib.back() < k) { // 피보나치 수열의 마지막 값이 k보다 작을 때까지 계속 생성
fib.push_back(fib.end()[-1] + fib.end()[-2]);
}
}
int solution(vector<int> &A) {
int n = A.size();
A.insert(A.begin(), 1); // 개구리가 시작하는 강둑
A.push_back(1); // 개구리가 도착하는 강둑
Fibonacci(n+2); // 피보나치 수열 생성
vector<int> jumps(n+2, -1); // 각 위치에 도달하는데 필요한 최소 점프 횟수를 저장할 벡터 -1 초기화
jumps[0] = 0; // 시작점에서의 점프 횟수는 0
for (int i = 1; i < n+2; i++) // 각 위치에서의 최소 점프를 구하기
{
if (A[i] == 0) continue; // 잎이 없는 위치는 건너뛰기
int min_jump = INT_MAX;
for (int j = 0; j < fib.size(); j++) // 가능한 모든 피보나치 점프를 시도
{
if (fib[j] > i) break; // 현재 위치보다 큰 점프는 무시
if (jumps[i-fib[j]] != -1) { // 이전 위치에서 점프가 가능한 경우, 최소 점프 횟수를 업데이트
min_jump = min(min_jump, jumps[i-fib[j]] + 1);
}
}
if (min_jump != INT_MAX) { // 최소 점프 횟수가 업데이트된 경우, 해당 위치에 저장
jumps[i] = min_jump;
}
}
return jumps[n+1]; // 마지막 위치에 도달하는데 필요한 최소 점프 횟수 반환
}
'⭐ 코딩테스트 > Codility' 카테고리의 다른 글
[Codility] Abs Distinct (0) | 2024.02.20 |
---|---|
[Codility] Count Conforming Bitmasks (0) | 2024.02.19 |
[Codility] Disappearing Pairs (0) | 2024.02.19 |
[Codility] Binary Gap (0) | 2024.02.18 |
[Codility] Array Inversion Count (0) | 2024.02.18 |
댓글
이 글 공유하기
다른 글
-
[Codility] Abs Distinct
[Codility] Abs Distinct
2024.02.20 -
[Codility] Count Conforming Bitmasks
[Codility] Count Conforming Bitmasks
2024.02.19 -
[Codility] Disappearing Pairs
[Codility] Disappearing Pairs
2024.02.19 -
[Codility] Binary Gap
[Codility] Binary Gap
2024.02.18