#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. 도달하지 못할 경우를 구해야한다.
'오늘의 알고리즘' 카테고리의 다른 글
[C++]월간 코드 챌린지 시즌2 괄호 회전하기(프로그래머스 2레벨) (0) | 2022.03.22 |
---|---|
[C++]2017 카카오코드 본선 GPS(프로그래머스 3레벨) (0) | 2022.03.21 |
[C++]2019 카카오 개발자 겨울 인턴십 불량 사용자(프로그래머스 3레벨) (0) | 2022.03.19 |
[C++]2020 카카오 인턴십 보석 쇼핑(프로그래머스 3레벨) (0) | 2022.03.17 |
[C++]2021 카카오 채용연계형 인턴십표 편집(프로그래머스 3레벨) (0) | 2022.03.16 |