[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
댓글을 사용할 수 없습니다.