[テストプログラマコード]ダイナミックプランニング(Dynamic Programming)-N表示
6700 ワード
頭が悪いので、他の人の草を参考に解いてしまいました…
import java.util.*;
class Solution {
private int answer = -1;
private int N = 0;
private int number = 0;
public int solution(int NVal, int numberVal) {
N = NVal;
number = numberVal;
calc(0, 0);
return answer;
}
public void calc(int tempAnswer, int tempNumber) {
if (tempAnswer > 8) {
return; // 최솟값이 8보다 크면 -1이 return 되도록 함
}
if (number == tempNumber) {
if (answer == -1) answer = tempAnswer;
else answer = Math.min(answer, tempAnswer); // 가장 최소 횟수
}
int tempNN = N;
for (int i=1; i<=(8-tempAnswer); i++) {
calc(tempAnswer + i, tempNumber + tempNN);
calc(tempAnswer + i, tempNumber - tempNN);
calc(tempAnswer + i, tempNumber * tempNN);
calc(tempAnswer + i, tempNumber / tempNN);
tempNN = tempNN * 10 + N; // 숫자를 붙인 형태, 뒤에 올 수도 앞에 올 수도 있음
}
}
}
Reference
この問題について([テストプログラマコード]ダイナミックプランニング(Dynamic Programming)-N表示), 我々は、より多くの情報をここで見つけました https://velog.io/@ynjch97/프로그래머스-코딩테스트-동적계획법Dynamic-Programming-N으로-표현テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol