1 분 소요

prob1

코드의 작동원리 설명Exp2

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;
    }   
}

실행결과result

댓글남기기