function solution(N, number) {
var answer = 0;
var use = Array.from(new Array(9), () => new Set());
if(N==number) return 1;
else {
use.forEach((element, index) => {
if (index !== 0) element.add(Number(String(N).repeat(index)));
});
for(var i=1 ; i<=8 ; ++i) {
for(var j=1 ; j<i ; ++j) {
for(var first of use[j]) {
for(var second of use[i-j]) {
use[i].add(first+second);
use[i].add(first-second);
use[i].add(first*second);
use[i].add(first/second);
}
}
}
if(use[i].has(number)) return i;
}
return -1;
}
return answer;
}
동적계획법은 복잡한 문제를 간단하게 나누어서 푸는 문제입니다.
N을 1번 사용하는 경우(5)를 use에 저장합니다.
N을 2번 사용하는 경우(55, 5+5, 5*5, 5/5, 5-5)를 저장합니다.
N을 3번 사용하는 경우는 N을 1번 사용하는 경우와 N을 2번사용하는 경우를 사칙연산하여 저장합니다.
N을 4번 사용하는 경우는 N을 1번 3번, 2번 2번, 3번 1번 하는 경우를 사칙연산하여 저장합니다.
i는 N을 몇 번이나 사용했는지에 대한 변수입니다.
각 i에 대해 가능한 연산들을 추가하고, number가 있으면 i를 리턴합니다.
문제에서 N이 8보다 크면 -1을 리턴하라고 하였으므로, 반복문에서도 결정이 되지않으면 -1을 리턴합니다.
좋은 풀이 감사합니다!!