import java.util.*;
class Solution {
public int solution(int N, int number) {
int answer = -1;
HashMap<Integer,HashSet<Integer>> hm = new HashMap<>();
HashSet<Integer> hs = new HashSet<>();
hs.add(N);
hm.put(1,hs);
loop: for(int i=2; i<9; i++){
HashSet<Integer> set = new LinkedHashSet<>();
int NNN = Integer.parseInt(Integer.toBinaryString((int)Math.pow(2,i)-1))*N;
if(NNN == number) return i;
set.add(NNN);
for(int j=1;j<i;j++){
Iterator<Integer> it1 = hm.get(j).iterator();
Iterator<Integer> it2 = hm.get(i-j).iterator();
while(it1.hasNext()) {
int itValue1 = it1.next();
while(it2.hasNext()) {
int itValue2 = it2.next();
for(Operator o : Operator.values()){
int calculate = o.calculate(itValue1,itValue2);
if(calculate == number) {
answer = i;
break loop;
}
set.add(calculate);
}
}
}
}
hm.put(i,set);
}
return answer;
}
enum Operator {
ADD {
@Override
public int calculate(int a, int b) {
return a + b;
}
},
SUB {
@Override
public int calculate(int a, int b) {
if(a>=b) return a - b;
else return b - a;
}
},
MUL {
@Override
public int calculate(int a, int b) {
return a * b;
}
},
DIV {
@Override
public int calculate(int a, int b) {
if(a>=b && b != 0) return a / b;
else if(a < b && a != 0) return b / a;
else return 0;
}
};
public abstract int calculate(int a, int b);
}
}
'Code IT > Algorithm' 카테고리의 다른 글
[프로그래머스] 정수 삼각형 - Dynamic Programming (Java) (0) | 2021.04.03 |
---|---|
[프로그래머스] 타일 장식물 - Dynamic Programming (Java) (0) | 2021.04.03 |
[프로그래머스] 탑 - Stack (Java) (0) | 2021.04.03 |
[프로그래머스] 위장 - Hash (Java) (0) | 2021.04.03 |
[프로그래머스] 전화번호 목록 - Hash (Java) (0) | 2021.04.03 |
댓글