알고리즘/프로그래머스

Programers N으로 표현

내이름은 킹햄찌 2022. 3. 12. 21:43

https://programmers.co.kr/learn/courses/30/lessons/42895

 

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

 

programmers.co.kr

프로그래머스 N으로 표현 문제입니다.  이전 타켓넘버 문제와 비슷합니다.

#include <string>
#include <vector>
#define MAX 9

using namespace std;

int minDepth = MAX;
int tartget;
int source;

int  min(int a, int b) {
	return a > b ? b : a;
}

void dfs(int depth, int num) {
	if (depth >= MAX) {
		return;
	}

	if (num == tartget) {
		minDepth = min(depth, minDepth);
	}

	int operand = 0;
	for (int i = 1; i <= MAX; i++) {
		operand = operand * 10 + source;

		dfs(depth + i, num + operand);
		dfs(depth + i, num - operand);

		if (num != 0) {
			dfs(depth + i, num * operand);
			dfs(depth + i, num / operand);
		}
	}
}

int solution(int N, int number) {
	int answer = 0;
	tartget = number;
	source = N;
	dfs(0, 0);
	answer = ((minDepth >= MAX) ? -1 : minDepth);

	return answer;
}

아이디어

결국에는 완전탐색을 해야하는데 3 33 333같은 숫자에 대한 처리와 완전탐색의 방법 구현으로 판단하여 DFS 사용