最大スコアを取得(バイナリツリーDFS)
今度の情報オリンピックで良い成績を取るために、賢洙は先生からもらったN題をやりたいと思っています.どの問題にも、解答にかかる点数と解答にかかる時間があります.制限時間M内では、N個の問題において最大スコアを得る必要がある.(問題に時間がかかる場合は、問題の解決とみなされます.タイプごとに1つの問題しか解決できません)
第1行は、問題の数N(1<=N<=20)およびタイムアウトM(10<=M<=300)を与える.
2行目からN行で問題を解くと、点数と問題を解くのにかかる時間が得られます.
最初の行では、有限時間で得られる最大スコアを出力します.
5 20
10 5
25 12
15 8
6 3
7 4
41
▼▼入力説明
第1行は、問題の数N(1<=N<=20)およびタイムアウトM(10<=M<=300)を与える.
2行目からN行で問題を解くと、点数と問題を解くのにかかる時間が得られます.
▼▼出力説明
最初の行では、有限時間で得られる最大スコアを出力します.
▼▼入力例1
5 20
10 5
25 12
15 8
6 3
7 4
▼▼出力例1
41
const input = fs.toString().split('\n');
const testCase = input.shift().toString().split(' ').map((v) => +v);
console.log(testCase)
const [num, maxTime] = testCase;
const arr = input.map((v) => v.split(' ').map((v) => +v));
const solution = (arr) => {
let answer = Number.MIN_SAFE_INTEGER;
const n = arr.length;
const DFS = (L, sum, time) => {
if (time > maxTime) return; // 시간이 넘으면 return
if(L === n) {
answer = Math.max(answer, sum); // answer 값 갱신
} else {
DFS(L + 1, sum + arr[L][0], time + arr[L][1]);
DFS(L + 1, sum, time);
}
}
DFS(0, 0, 0);
return answer;
}
console.log(solution(arr));
Reference
この問題について(最大スコアを取得(バイナリツリーDFS)), 我々は、より多くの情報をここで見つけました https://velog.io/@fredkeemhaus/최대점수-구하기-이진트리-DFSテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol