❓ -> ❗ 졸업 선물 : Brute Force

frenchkebab·2021년 8월 21일
0
post-thumbnail

전혀 접근을 못하겠었는데,
'시간 복잡도 생각 1도 안하고 풀어보자' 하니까 풀렸다.

일단 어차피 나는 이 안되니 시간복잡도를 고려하지 말고
Brute Force일단 들이받는 연습을 많이 해야겠다.



Solution 풀이

function solution(m, product) {
  let answer = 0;
  let n = product.length;
  product.sort((a, b) => a[0] + a[1] - (b[0] + b[1]));
  for (let i = 0; i < n; i++) {
    let money = m - (product[i][0] / 2 + product[i][1]);
    let cnt = 1;
    for (let j = 0; j < n; j++) {
      if (j !== i && product[j][0] + product[j][1] > money) break;
      if (j !== i && product[j][0] + product[j][1] <= money) {
        money -= product[j][0] + product[j][1];
        cnt++;
      }
    }
    answer = Math.max(answer, cnt);
  }
  return answer;
}

let arr = [
  [6, 6],
  [2, 2],
  [4, 3],
  [4, 5],
  [10, 3]
];
console.log(solution(28, arr));

내 풀이

function solution(m, product) {
  let max = Number.MIN_SAFE_INTEGER;
  for (let i in product) {
    let arr = product;
    // i 번째 선물에 쿠폰 적용
    arr[i][0] /= 2;
    arr = arr.sort((a, b) => a[0] + a[1] - (b[0] + b[1]));
    let cnt = 0;
    let sum = 0;
    for (let x of arr) {
      if (sum >= m) {
        if (max < cnt) max = cnt;
        break;
      }
      sum += x[0] + x[1];
      cnt++;
    }
  }
  answer = max;
  return answer;
}

let arr = [
  [6, 6],
  [2, 2],
  [4, 3],
  [4, 5],
  [10, 3]
];
console.log(solution(28, arr));

내 풀이가 Solution 풀이보다 비효율적인 점

  1. product 배열먼저 sort 했어도 됐을듯 하다.
  2. 일단 할인쿠폰을 적용한 선물부터 예산에서 빼고 나머지를 카운트하는 것이
    맞는 것 같다.
    (할인쿠폰만 적용하고 실제로 사지는 못하는 경우가 카운트됐을 것 같다)


느낀 점

  • 그래도 내 힘으로 Brute Force로 들이받는 시도성공한 것 같아서 뿌듯하다
  • sort()를 잘 사용한 것 같아서 기쁘다
profile
Blockchain Dev Journey

0개의 댓글