강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

1djb23님의 프로필 이미지
1djb23

작성한 질문수

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

4. 졸업선물

코드 리뷰 부탁드립니다!

작성

·

24

0

function solution(m, arr) {
  arr.sort((a, b) => a[0] + a[1] - (b[0] + b[1]));
  let answer = 0;
  for (let discount = 0; discount < arr.length; discount++) {
    //할인이 적용되는 상품
    let discountPrice = arr[discount][0] / 2 + arr[discount][1];
    let budget = m - discountPrice;
    let temp = 1;
    for (let undiscount = 0; undiscount < arr.length; undiscount++) {
      //할인이 적용된 상품은 제외
      if (discount === undiscount) continue;
      let price = arr[undiscount][0] + arr[undiscount][1];
      budget -= price;
      //예산을 초과하는 경우
      if (budget >= 0) temp++;
      if (budget < 0) budget += price;
    }
    answer = Math.max(answer, temp);
  }
  return answer;
}

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

님이 제공해주신 코드는 할인 상품을 선택하여 최대한 많은 상품을 구매할 수 있는 경우를 찾는 알고리즘입니다. 로직을 살펴보면, 모든 상품을 하나씩 할인된 상품으로 가정하고, 나머지 상품을 정가로 구매할 때 몇 개의 상품을 살 수 있는지를 계산합니다.

다음은 코드의 주요 동작 방식입니다:

  1. 상품 정렬: 입력받은 상품 배열 arr는 상품 가격과 배송비의 합을 기준으로 오름차순 정렬되었습니다. 이는 더 많은 상품을 살 수 있게 하려는 전략의 일환입니다.

  2. 할인 상품 선택 및 예산 계산:

    • 각 상품을 할인된 상품으로 한 번씩 가정하고 이 상품의 할인된 가격을 구합니다.
    • 할인된 가격을 전체 예산 m에서 제외하여 남은 예산으로 남은 상품들을 구매할 수 있는지를 확인합니다.
  3. 상품 구매 확인:

    • 남은 예산 내에서 구매 가능한 상품의 갯수를 계산합니다. 이때 이미 할인을 받은 상품은 제외하며, 가능한 경우 temp 카운트를 증가시킵니다.
  4. 최대 구입 가능한 상품 갯수 추적 및 반환:

    • 각각의 케이스에서 최대 구매 가능한 상품의 수를 추적하여, 그 중 최대값을 answer에 저장하여 반환합니다.

이 접근 방식은 반복문을 두 번 사용하여 복잡도가 높아질 수 있지만, 할인을 순차적으로 적용하여 다양한 시나리오를 고려하는 유용한 방법입니다.

유사한 다른 코드 리뷰 및 참조 링크를 확인하고자 하실 경우, 다음의 게시물을 참조하세요:
- “안녕하세요. 이런 방식으로 접근해도 될까요?”: 몇 가지 반례에 대한 설명과 함께, 코드의 논리적 오류 파악에 도움을 드릴 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

1djb23님의 프로필 이미지
1djb23

작성한 질문수

질문하기