작성
·
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 인턴입니다.
님이 제공해주신 코드는 할인 상품을 선택하여 최대한 많은 상품을 구매할 수 있는 경우를 찾는 알고리즘입니다. 로직을 살펴보면, 모든 상품을 하나씩 할인된 상품으로 가정하고, 나머지 상품을 정가로 구매할 때 몇 개의 상품을 살 수 있는지를 계산합니다.
다음은 코드의 주요 동작 방식입니다:
상품 정렬: 입력받은 상품 배열 arr
는 상품 가격과 배송비의 합을 기준으로 오름차순 정렬되었습니다. 이는 더 많은 상품을 살 수 있게 하려는 전략의 일환입니다.
할인 상품 선택 및 예산 계산:
m
에서 제외하여 남은 예산으로 남은 상품들을 구매할 수 있는지를 확인합니다.상품 구매 확인:
temp
카운트를 증가시킵니다.최대 구입 가능한 상품 갯수 추적 및 반환:
answer
에 저장하여 반환합니다.이 접근 방식은 반복문을 두 번 사용하여 복잡도가 높아질 수 있지만, 할인을 순차적으로 적용하여 다양한 시나리오를 고려하는 유용한 방법입니다.
유사한 다른 코드 리뷰 및 참조 링크를 확인하고자 하실 경우, 다음의 게시물을 참조하세요:
- “안녕하세요. 이런 방식으로 접근해도 될까요?”: 몇 가지 반례에 대한 설명과 함께, 코드의 논리적 오류 파악에 도움을 드릴 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.