(실버 3) 1로 만들기
이 문제는 시간 초과 제한이 있는 문제입니다.
계산할 필요가 없는 상황을 return 시켜서 시간을 단축해야 합니당
visit 배열을 만들어서 이미 방문한 곳을 return하는 방법도 있지만
제가 생각해낸 방법은 현재 가장 작은 값보다 같거나 크다면 굳이 더 이상 작은 값을
찾아야하는 계산을 할 필요가 없다고 생각하여 그 상황이 온다면 return을 시켰습니다.
#include <iostream> #include <algorithm> using namespace std; int maxs = 1000001; void ja(int n, int c){ if(maxs < c) { return; } if(n <= 3) { if(c < maxs) { maxs = c; } return; } c++; if(n % 3 == 0) { ja(n/3,c); } if(n % 2 == 0) { ja(n/2,c); } ja(--n,c); } int main() { int n; cin >> n; if(n == 1) { cout << 0; return 0; } ja(n,1); cout << maxs; return 0; }
'개발 > 알고리즘' 카테고리의 다른 글
BFS 백준-2178 미로탐색 (실버 1) (0) | 2024.04.21 |
---|---|
2024-04-20 앳코더 (A,B,C) (0) | 2024.04.21 |
백준-6189 (골드 5) 옥상 정원 꾸미기 STACK (2) | 2024.04.18 |
백준-1926 (실버-1) BFS (1) | 2024.04.18 |
백준 2775 - 부녀회장이 될테야 (브론즈 1) (0) | 2024.04.04 |