쾌락없는 책임 (공부)/알고리즘 문제풀이

프로그래머스 N으로 표현 - C++

허스크 2021. 5. 13. 20:24
반응형

 

 

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

 

programmers.co.kr

#include <string>
#include <vector>
#include <algorithm>

using namespace std;
int ans = 9;

void DP(int n, int num, int count, int cur){
    if(count > 8)
        return;
    
    if(cur == num){
        ans = min(ans, count);
        return;
    }
    // 더하기, 붙이기, 나누기
    int temp = 0;
    for(int i = 0; i + count < 9; i++){
        temp = temp * 10 + n;   // n, nn, nnn ...
        DP(n, num, count + 1 + i, cur + temp);
        DP(n, num, count + 1 + i, cur * temp);
        DP(n, num, count + 1 + i, cur / temp);
        DP(n, num, count + 1 + i, cur - temp);
    }
}

int solution(int N, int number) {
    DP(N, number, 0, 0);
    
    if(ans > 8) 
        ans = -1;
    
    return ans;
}

 이게 DP인지 DFS인지는 감이 잘 안잡히긴 하지만 경우의수가 많지 않아서 위로도 풀 수 있었습니다. DP 함수에서 중요한건 temp를 통해 새로운 수를 찾아가는겁니다. 기존 수인 cur에 추가적으로 temp를 연산하는 것인데 temp는 10을 곱한 뒤 n 을 더해 n, nn, nnn, nnnn ... 이런 식으로 만들어지게 했습니다.

반응형