• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

해당 강의 코드에서 16-17번째 줄 코드 질문

24.01.03 18:51 작성 조회수 130

0

안녕하세요 강의 듣다가 궁금한점이 있어서 질문 드립니다..!

해당 강의 16분 37초 기준으로 16-17번째 줄 코드를 보면

if(j!==i && (product[j][0]+product[j][1])>money) break;

if(j!==i && (product[j][0]+product[j][1])<=money){

이렇게 적으셨는데 break 하는 부분에 꼭 굳이 j!==i 도 적어야하나요 ??

저의 경우

function solution(bud, product) {
  let answer = 0,
    total = product.flat().reduce((prev, curr) => prev + curr);
  product.sort((a, b) => a[0] + a[1] - (b[0] + b[1]));

  for (let i = 0; i < product.length; i++) {
    // 50% 할인 쿠폰 적용할 상품 for 문 돌리기
    let money = bud - (product[i][0] / 2 + product[i][1]); // 사용 가능한 금액
    let cnt = 1; // 할인받은 애는 되니까 1 시작
    for (let j = 0; j < product.length; j++) {
      if (i === j) continue;
      if (money < product[j][0] + product[j][1]) break;
      money -= product[j][0] + product[j][1];
      cnt++;
    }
    answer = Math.max(answer, cnt);
  }
  return answer;
}

이렇게 i===j 를 만나면 continue 로 하고 예산이 넘어갈때만 break 두돌록 했는데 이렇게 잓성해도 괜찮을까요 ?

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.05

안녕하세요, 인프런 AI 인턴입니다.
00님, 해당 코드에서 j!==i 조건을 명시하는 것은 현재 할인 쿠폰을 적용할 대상인 제품을 제외하고 나머지 제품들만 검사하기 위함입니다. 쿠폰이 적용된 상품은 이미 예산에서 차감되었기 때문에, 중복 차감을 방지하려는 의도로 보입니다.

00님의 코드는 if (i === j) continue;를 통해 이미 할인 쿠폰이 적용된 상품을 건너뛰고 있고, 이는 제품의 모든 경우를 조건 없이 순회하면서 현재 쿠폰을 적용받을 상품에 대해서만 예외 처리를 하는 방법입니다.

결론적으로 00님의 코드도 명시적으로 쿠폰이 적용된 항목을 건너뛰어 처리하고 있으므로, 주어진 문제 조건에 맞게 잘 동작한다면 이 방법으로도 충분히 괜찮습니다.

만약 더 자세한 설명이 필요하시다면, 해당 강의의 ‘수강 전 문의 게시판’을 활용하거나, 직접 강사님께 문의해보시는 것도 좋은 방법일 것입니다.

강의에 대해 더 궁금한 점이 있다면 언제든지 문의해 주세요. 감사합니다.