NOTE/프로그래머스

N으로 표현

m-inz 2022. 9. 29. 16:57

 

import java.util.HashSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
class Solution {
    public int solution(int N, int number) {
        List<Set<Integer>> result = new ArrayList<>();
        for(int i=0; i<=8; i++){
            result.add(new HashSet<>());
        }
        result.get(1).add(N); //N을 1개만 쓰는 경우
        
        for(int i=1; i<=8; i++){
            Set<Integer> set = result.get(i); //현재 set
            set.add(Integer.parseInt(String.valueOf(N).repeat(i)));
            
            for(int j=1; j<i; j++){ //이전 set들 사칙연산
                for(int left : result.get(j)){
                    for(int right : result.get(i-j)){
                        set.add(left+right);
                        set.add(left-right);
                        set.add(left*right);
                        if(right!=0) set.add(left/right);
                    }
                }
            }
            
            if(set.contains(number)) return i;   
        }
        return -1;
    }
}

 

전에 dfs로 풀었다가 명색이 dp 문젠데 ....라 해서 다시 풀었다.

result에 set이 들어가게되는데

index가 1인 경우가 N이 1개인 경우,

index가 2인 경우가 N이 2개인 경우 .... 

로 index를 바로 이용하기 위해 0은 빈공간으로 만들어주었다.