끄적이다 보면 동일한 결과값을 삽입해야 하는데, 중복처리하는 것이 효율적이기 때문에
set을 사용해야 한다.
set에 저장된 값 중에서
s[3] = s[2] vs s[1]
s[3] = s[1] vs s[2]
를 해야하는데, set에 있는 모든 값들을 처리해야 하므로 이터레이터를 사용해야 한다.
-> 2번째 for문까지 작성하다가 어떻게 할까??? 고민에 빠졌다...
#include <string>
#include <vector>
#include <set>
using namespace std;
int solution(int N, int number) {
int answer = -1;
set<int>s[9];
s[1].insert(N);
int m = N;
for(int i = 2; i <= 8; i++)
{
m = 10 * m + N;
s[i].insert(m);
for(int j = 1; j < i; j++)
{
for(auto k : s[i - j])
{
for(auto l : s[j])
{
s[i].insert(k + l);
s[i].insert(k - l);
s[i].insert(k * l);
if(l != 0)
s[i].insert(k / l);
}
}
}
}
for(int i = 1; i < 9; i++)
{
auto iter = s[i].find(number);
//최소값을 찾는 것이므로 인덱스 i는 사용한 횟수를 나타내므로
if(iter != s[i].end())
{
answer = i;
break;
}
}
return answer;
}