https://school.programmers.co.kr/learn/courses/30/parts/12263
Level 3
아래와 같이 5와 사칙연산만으로 12를 표현할 수 있습니다.
12 = 5 + 5 + (5 / 5) + (5 / 5)
12 = 55 / 5 + 5 / 5
12 = (55 + 5) / 5
5를 사용한 횟수는 각각 6,5,4 입니다. 그리고 이중 가장 작은 경우는 4입니다.
이처럼 숫자 N과 number가 주어질 때, N과 사칙연산만 사용해서 표현 할 수 있는 방법 중 N 사용횟수의 최솟값을 return 하도록 solution 함수를 작성하세요.
import java.util.*;
public class Solution {
public int solution(int N, int number) {
if (N == number) return 1;
List<Set<Integer>> dp = new ArrayList<>();
for (int i = 0; i <= 8; i++) {
dp.add(new HashSet<>());
}
for (int i = 1; i <= 8; i++) {
int repeatedN = Integer.parseInt(String.valueOf(N).repeat(i));
dp.get(i).add(repeatedN);
}
for (int i = 1; i <= 8; i++) {
for (int j = 1; j < i; j++) {
for (int a : dp.get(j)) {
for (int b : dp.get(i - j)) {
dp.get(i).add(a + b);
dp.get(i).add(a - b);
dp.get(i).add(a * b);
if (b != 0) dp.get(i).add(a / b);
}
}
}
if (dp.get(i).contains(number)) {
return i;
}
}
return -1;
}
}
DP는 잘 모르겠어서 GPT에게 도움을 받았다,,

