자바스크립트 코딩테스트 '최대점수 구하기'

릿·2021년 9월 9일
0

코딩테스트

목록 보기
8/27

현수는 제한시간 M분 안에 N개의 문제를 풀어서 최대점수를 얻을 수 있도록 해야 한다. 이 때, 최대 점수를 구하라.
첫 줄에 문제갯수와 제한시간이 제시.
둘째 줄에 문제의 점수, 걸리는 시간 배열이 제시.

  1. 내 풀이 :
    실컷 코드 다 쳐놓고 문제 자체를 이해를 못해서 한참 헤맸다.
    문제에는 배열이 총 6개였는데 실제 문제에는 배열이 5개라서 문제가 잘못된 건가 했는데
    그냥 문제를 잘못 읽은 거...;
    시간sum이 제한시간을 넘지 않는 부분집합 중에서 최대 점수sum을 구했다.
function solution(m, ps, pt){  
    let answer=0;  
    function DFS(L, pSum, tSum) {
        if (L===ps.length) {
            if (answer < pSum && m >= tSum) answer=pSum;
        }
        else {
            console.log(L, pSum, tSum)
            DFS(L+1, pSum+ps[L], tSum+pt[L]);
            DFS(L+1, pSum, tSum);
        }
    }
    DFS(0, 0, 0);
    return answer;
}

let ps=[10, 25, 15, 6, 7];
let pt=[5, 12, 8, 3, 4];
console.log(solution(20, ps, pt));
  1. 쌤 풀이 :
    중간에 time이 m을 넘으면 아예 리턴시켜버리는 게 핵심인 것 같다.
function solution(m, ps, pt){         
    let answer=Number.MIN_SAFE_INTEGER;
    let n=ps.length;
    function DFS(L, sum, time){
        if(time>m) return;
        if(L===n){
            answer=Math.max(answer, sum);
        }
        else{
            DFS(L+1, sum+ps[L], time+pt[L]);
            DFS(L+1, sum, time);
        }   
    }

    DFS(0, 0, 0);
    return answer;
}

let ps=[10, 25, 15, 6, 7];
let pt=[5, 12, 8, 3, 4]
console.log(solution(20, ps, pt));
profile
새로운 도전과 재미를 추구하는 프론트엔드 개발자

0개의 댓글