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

김도현님의 프로필 이미지
김도현

작성한 질문수

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

4. 졸업선물

코드 리뷰 부탁드립니다!

작성

·

141

0

function solution(m, product){
let answer=0;
let temp = m;
for(let p of product) {
p[0] /= 2;
  let sum = [];
  for(let i of product) {
  sum.push(i[0] + i[1])
  }
  sum.sort((a,b)=> a-b);
 
  let cnt = 0;
  for(let i = 0; i < sum.length; i++) {
  if(temp >= 0) {
    temp -= sum[i];
    cnt++;
  }
  if((temp < 0 || i === sum.length-1) && (cnt >= answer)){
  answer = cnt;
    break;
  }
  }
  temp = m;
  p[0] *= 2;
}
return answer;
}
 
* 이렇게 풀이를 해도 괜찮을까요?
1. 비용을 차례로 절반으로 한 뒤 가격+배송비의
배열을 오름차로 정렬시킴.
2. 예산에서 가격+배송비의 배열에서 하나씩 감소
시키며 개수 카운트함.
3. 개수의 최대를 answer로 함.

답변 1

0

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

안녕하세요^^

반례입니다. 답은 2입니다.

console.log(solution(596, [[6331], [4251], [8675], [5214], [10735], [5996], [9609], [9371], [8377], [5707], [7907], [6433], [9737], [8796], [4265], [3484], [8488], [8191], [9232], [4195]]));

김도현님의 프로필 이미지
김도현
질문자

if(temp > 0) 부분에서 if(temp - sum[i] > 0)으로 오류를 찾았습니다.

혹시 고친 코드로 다시 부탁드리겠습니다!! 감사합니다 ㅎㅎㅎ

function solution(m, product) {
let answer = 0;
let temp = m;
for (let p of product) {
p[0] /= 2;
let sum = [];
for (let i of product) {
sum.push(i[0] + i[1]);
}
sum.sort((a, b) => a - b);
console.log("sum", sum);

let cnt = 0;
for (let i = 0; i < sum.length; i++) {
if (temp - sum[i] >= 0) {
temp -= sum[i];
cnt++;
}
if ((temp < 0 || i === sum.length - 1) && cnt >= answer) {
answer = cnt;
break;
}
}
temp = m;
p[0] *= 2;
}
return answer;
}
김도현님의 프로필 이미지
김도현

작성한 질문수

질문하기