오늘의 알고리즘
[C++]2017 카카오코드 예선 4단 고음(프로그래머스 4레벨)
하늘하늘 .
2022. 3. 19. 22:46
#include <cmath>
#include <stdio.h>
// 앞에서 말고 뒤에서 부터 시작해야한다.
int findCase(int n, int iPlus)
{
int result = 0;
// 아예 도달할 수 없는 경우 리턴 0
if (n < 1 || 2 * log(n) / log(3) < iPlus)
return 0;
else if (n == 3 && iPlus == 2)
return 1;
else if (n == 3 && iPlus == 3)
return 0;
// 3으로 나눠지고 Plus가 2이상이면 *를 쓰고 +를 2개 제거
if (n % 3 == 0 && iPlus >= 2)
result += findCase(n / 3, iPlus - 2);
// 나눠지지 않는다면 +를 쓴다.
result += findCase(n - 1, iPlus + 1);
return result;
}
int solution(int n)
{
int answer = 0;
return findCase(n - 2, 2);
}
1. 곱하면서 시작하는 게 아니라 빼면서 시작해야한다
2. 도달하지 못할 경우를 구해야한다.