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

kimcola님의 프로필 이미지
kimcola

작성한 질문수

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

4. 졸업선물

이 풀이도 가능한지 궁금합니다 !

작성

·

232

0

function solution(M, arr) {
  const N = arr.length;
  let answer = Number.MIN_SAFE_INTEGER;

  for (let i = 0; i < N; i++) {
    let pp = []; // 상품 가격
    let pd = 0; // 배송비
    let cnt = 1;
    pp.push(arr[i][0]);
    pd += arr[i][1];
    for (let j = i + 1; j < N; j++) {
      pp.push(arr[j][0]);
      pd += arr[j][1];
      cnt++;

      const maxPrice = Math.max(...pp);
      // 총 가격 계산
      const totalProductPrice = pp.reduce((total, val) => {
        if (val === maxPrice) total += val / 2;
        else total += val;
        return total;
      }, 0);
      const totalPrice = totalProductPrice + pd;
      if (totalPrice > M) break;
      answer = Math.max(answer, cnt);
    }
  }

  return answer;
}

 

 

현재 예제에서는 답이 나오는데 괜찮은지 문의드립니다 !

답변 2

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

네. 잘 하신 코드입니다. 반례는 없어보입니다. 다만 영상의 방법도 꼭 익혀두시기 바랍니다.

0

안녕하세요, 인프런 AI 인턴이에요.

제공해주신 코드를 봤을 때, 기능적으로는 문제 없어 보이지만 코드의 가독성을 높이고 성능을 개선할 여지가 있습니다. 예를 들어, 가격을 비교하는 부분에서 Math.max() 메서드를 사용하는 대신, for 문으로 간단하게 구현할 수 있습니다. 또한, pp 배열은 let pp = [arr[i][0]] 처럼 초기화하는 것이 더 간결합니다.

아래는 코드를 개선한 예시입니다.

function solution(M, arr) {
  const N = arr.length;
  let answer = Number.MIN_SAFE_INTEGER;

  for (let i = 0; i < N; i++) {
    let pPrice = arr[i][0]; // 첫 상품 가격
    let dPrice = arr[i][1]; // 첫 배송비
    let cnt = 1;

    for (let j = i + 1; j < N; j++) {
      const cPrice = arr[j][0];
      const cDlv = arr[j][1];
      
      if (cPrice > pPrice) {
        pPrice = cPrice; // 최대 가격 업데이트
      }
      
      dPrice += cDlv; // 배송비 누적
      cnt++;
      
      const total = pPrice * cnt + dPrice;
      if (total > M) break;
      
      answer = Math.max(answer, cnt);
    }
  }

  return answer;
}

코드의 가독성을 높이기 위해 변수 이름을 좀 더 명확하게 바꿨고, pp 배열을 없앴습니다. 또한, 상품 가격 중 최대값을 찾기 위해 Math.max() 대신 if 문을 사용하도록 변경하고, 이를 위해 pp 배열 또한 대체되었습니다. 이렇게 함으로써, 코드가 더 직관적이고 성능도 더 개선된 것으로 생각됩니다.

그리고, 가능하다면 코드 중간중간에 각 라인이 어떤 역할을 하는지 주석을 달아준다면 가독성을 높일 수 있습니다.

위 내용이 도움이 되었으면 좋겠습니다. 감사합니다!

kimcola님의 프로필 이미지
kimcola

작성한 질문수

질문하기