[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] Abs Distinct https://app.codility.com/programmers/lessons/15-caterpillar_method/abs_distinct/start/ Codility Your browser is not supported Please, update your browser or switch to a different one. Learn more about what browsers are supported app.codility.com 해결전략 set 전체 절대값 수 구하기 정답코드 #include #include int solution(vector &A) { set mySet; for(int i = 0; i < A.size(); i++){ mySet.inser… -
[Codility] Count Conforming Bitmasks
[Codility] Count Conforming Bitmasks
2024.02.19[Codility] Count Conforming Bitmasks https://app.codility.com/programmers/trainings/9/count_conforming_bitmasks/start/ Codility Your browser is not supported Please, update your browser or switch to a different one. Learn more about what browsers are supported app.codility.com 해결전략 비트마스크 Bitmask 비트연산자 주어진 정수 A, B, C 중 적어도 하나에 conform하는 다른 정수의 개수를 찾아야 한다. conform이라는 것은? 주어진 정수의 비트 중 하나라도 1이면, con… -
[Codility] Disappearing Pairs
[Codility] Disappearing Pairs
2024.02.19[Codility] Disappearing Pairs https://app.codility.com/programmers/trainings/4/disappearing_pairs/start/ Codility Your browser is not supported Please, update your browser or switch to a different one. Learn more about what browsers are supported app.codility.com 해결전략 문자열 String 스택 Stack 처음 시도한 코드 - 시간초과 #include #include using namespace std; string solution(string& S) { int i = 0, j = 1; while … -
[Codility] Binary Gap
[Codility] Binary Gap
2024.02.18[Codility] Binary Gap https://app.codility.com/programmers/trainings/9/binary_gap/start/ Codility Your browser is not supported Please, update your browser or switch to a different one. Learn more about what browsers are supported app.codility.com 해결방안 비트 마스킹 Bitmasking Bitwise operations 정답코드 #include int answer; int solution(int N) { int n = N; int k = 0; while(n){ n /= 2; k++; } int cnt = 0; …
댓글을 사용할 수 없습니다.