알고리즘/프로그래머스

[JAVA/DP] 프로그래머스 N으로 표현

waterground 2021. 10. 21. 15:28

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/42895?language=java 

 

코딩테스트 연습 - N으로 표현

 

programmers.co.kr

 

2. 풀이

  • 재귀함수를 이용한 DP를 통해 풀이한다.
  • 재귀함수의 매개변수로 지금까지 쓰인 숫자의 수, 현재까지의 계산 결과를 넣는다.
  • for문을 통해 숫자의 갯수를 가능한 범위까지 늘려가며 +,-,/,* 연산을 한다. 최솟값이 8보다 크면 -을 return 한다.

 

3. 코드

class Solution {
    int answer = 9;
    
    public void dp(int N, int number, int count, int currentNumber){
        if(count > 8) {
            return;
        }
        if(currentNumber == number) {
            answer = Math.min(answer, count);
            return;
        }
        
        int tempNumber = 0;
        for(int i = 0; i + count < 9; i++){
            tempNumber = tempNumber * 10 + N;
            dp(N, number, count + 1 + i, currentNumber + tempNumber);
            dp(N, number, count + 1 + i, currentNumber - tempNumber);
            dp(N, number, count + 1 + i, currentNumber / tempNumber);
            dp(N, number, count + 1 + i, currentNumber * tempNumber);
        }
    }
    
    
    public int solution(int N, int number) {
        
        if(N == number) return 1;
    
        dp(N,number, 0, 0);
        
        return (answer == 9) ? -1 : answer;
    }
}