다이나믹 프로그래밍으로 풀어야 하는데 DFS로 풀이한 것 같다.
다이나믹 프로그래밍을 더 연습하자.
N
의 사용 횟수가 8이 넘어가면 return 한다.N
을 더 적게 사용한 것을 answer
에 갱신한다.answer
를 반환한다.class Solution {
private int n;
private int target;
private int answer = Integer.MAX_VALUE;
public int solution(int N, int number) {
n = N;
target = number;
dfs(0, 0);
return answer == Integer.MAX_VALUE ? -1 : answer;
}
private void dfs(int depth, int num) {
if (depth > 8) {
return;
}
if (num == target) {
answer = Math.min(answer, depth);
return;
}
int tempN = n;
for (int i = 1; i <= 8 - depth; i++) {
int nextDepth = depth + i;
dfs(nextDepth, num + tempN);
dfs(nextDepth, num - tempN);
dfs(nextDepth, num / tempN);
dfs(nextDepth, num * tempN);
tempN = tempN * 10 + n;
}
}
}