N으로 표현(프로그래머스 Lv3)
코드의 작동원리 설명
import java.util.*;
import java.lang.Math;
class Solution
{
public int solution(int N, int number)
{
int answer = 0;
//정수를 key로하고 어레이 리스트(정수를 요소로 가짐)를 value로 하는 HashMap변수를 선언한다.
//여기서 정수는 사칙연산에 사용된 숫자 N의 개수를 뜻하고,
//어레이 리스트들의 각 요소는, 특정 개수의 N의 사칙연산
//결과 값을 집어넣을 것이다.
HashMap<Integer, ArrayList<Integer>> all_num = new HashMap<Integer, ArrayList<Integer>>();
ArrayList<Integer> s_num = new ArrayList<Integer>();
//.add(N) => 어레이 리스트에 N을 추가한다.
s_num.add(N);
//초기치 설정
//key=1, value=s_num(=N)
//.put(1,s_num) => key값 1에 s_num에 해당하는 값을 value로 넣는다.
all_num.put(1,s_num);
for(int i=2; i<=8; i++)
{
ArrayList<Integer> p_num = new ArrayList<Integer>();
int repeat_num = 0;
//N, NN, NNN,...등의 숫자를 만들기 위한 반복문
for(int m=0; m<i; m++)
{
//Math.pow(10,m) == 10^m과 같다
repeat_num += N*Math.pow(10,m);
}
p_num.add(repeat_num);
for(int o=1; o<i; o++ )
{
//.get(o)=> key값을 o에 해당하는 value를 가져온다.
for(int p : all_num.get(o))
{
for(int q : all_num.get(i-o))
{
p_num.add(p+q);
p_num.add(p*q);
p_num.add(p-q);
//0으로 나누면 무한데가 됨으로
//조건문을 걸어 놓는다.
if(q !=0)
{
p_num.add(p/q);
}
}
}
}
all_num.put(i,p_num);
}
//만족하는 식이 있는지 판별하기 위해 find써 넣기
boolean find = false;
//loop:
//=>안쪽 for문의 조건 만족시 두개의 for문에서 빠져나온다.
loop :
for(int k=1; k<=8; k++)
{
for(int l : all_num.get(k))
{
if(l==number)
{
answer = k;
find = true;
break loop;
}
}
}
answer = (find == false) ? -1 : answer;
return answer;
}
}
실행결과
댓글남기기