#include <string>
#include <vector>
#include <unordered_set>
using namespace std;
int NN(int N, int idx){
int result=N;
for(int i=1; i<=idx;i++){
result=result*10 +N;
}
return result;
}
int solution(int N, int number) {
if(N==number)
return 1;
vector<unordered_set<int>> DP(8);
DP[0].insert(N);
for(int k=1;k<8;k++){
for(int i=0; i<k;i++){
for(int j=0; j<k;j++){
if(i + j + 1!=k)continue;
for(int a:DP[i]){ <<범위기반 for문으로 검색하면 나옴.
for(int b:DP[j]){
DP[k].insert(a+b);
if(a-b>0)
DP[k].insert(a-b);
DP[k].insert(a*b);
if(a/b>0)// a/b가 0이되는 경우를 제외 해줌.
DP[k].insert(a/b);
}
}
}
}
DP[k].insert(NN(N,k));
if(DP[k].count(number))
return k+1;
}
return -1;
}
출처 : https://mind-devlog.tistory.com/2
풀이 방법은 생각했으나 실제로 코드화 하는데 어려움을 겪어 출처를 남긴 곳에서 공부함.
dp문제들은 코드화가 감이 안잡힌다..