반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

짧은코딩

졸업 선물 본문

반응형

 

해결법

이 문제는 가장 비싼 선물을 할인 받는다고 해서 선물 받을 수 있는 최대 학생 수를 구할 수 없다. 따라서 모든 경우의 수를 다 해봐야 한다. 그래도 가장 싼 선물부터 계산해보는 것이 효율적이니 오름차순으로 정렬을 했다. 

그리고 for문으로 첫 번째 선물부터 마지막 선물까지 다 할인을 적용했다치고 각 경우에 대해서 계산을 해야한다. 따라서 이중 for문을 이용해서 이를 구한다. 각 선물을 계산 할 때 마다 cnt 변수를 ++해준다. 주의할 점은 product와 m은 계속 써야하는 변수라서 다른 변수에 넣어두고 사용해야 한다.

그 후에 answer에 answer, cnt 값 중 더 큰 것을 넣어주면 된다.

 

코드

<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function solution(m, product) {
        let answer = 0;

        product.sort((a, b) => a[0] + a[1] - (b[0] + b[1]));

        for (let i = 0; i < product.length; i++) {
          let money = m - (product[i][0] / 2 + product[i][1]);
          let cnt = 1;
          for (let j = 0; j < product.length; j++) {
            if (i !== j && product[j][0] + product[j][1] > money) break;
            if (i !== j && product[j][0] + product[j][1] <= money) {
              money -= product[j][0] + product[j][1];
              cnt++;
            }
          }
          answer = Math.max(answer, cnt);
        }

        return answer;
      }

      let arr = [
        [6, 6],
        [2, 2],
        [4, 3],
        [4, 5],
        [10, 3],
      ];
      console.log(solution(28, arr));
    </script>
  </body>
</html>
반응형

'코딩테스트 with JS > 자바스크립트 알고리즘 문제풀이(인프런)' 카테고리의 다른 글

공통원소 구하기(투 포인터)  (0) 2022.08.22
K번째 큰 수  (0) 2022.08.21
멘토링  (0) 2022.08.21
문자열 압축  (0) 2022.08.17
가장 짧은 문자거리  (0) 2022.08.16
Comments