[프로그래머스 lev2/JS] 최솟값 만들기

woolee의 기록보관소·2022년 11월 8일
0

알고리즘 문제풀이

목록 보기
82/178

문제 출처

프로그래머스 lev2 - 최솟값 만들기

나의 풀이

1차 시도 (시간초과)

function solution(A,B){
  let ch = Array.from({length:B.length}, () => 0);
  let answer = Number.MAX_SAFE_INTEGER;
  function Abs (L, sum) {
    if (L>=A.length) {
      if (sum < answer) {
        answer = sum;
      }
    }
    else {
      for (let i=0; i<B.length; i++) {
        if (ch[i]==0) {
          ch[i]=1;
          Abs(L+1, sum + A[L]*B[i]);
          ch[i]=0;
        }
      }
    }
  }
  Abs(0, 0);
  return answer;
}
console.log(solution([1, 4, 2], [5, 4, 4]));
// console.log(solution([1, 2], [3, 4]));

2차 시도 (시간초과)

function solution(A,B){
  let ch = Array.from({length:B.length}, () => 0);
  let answer = Number.MAX_SAFE_INTEGER;
  function Abs (a,b, sum) {
    if (a.length<=0) {
      answer = Math.min(answer, sum);
    }
    else {
      let tmp = a.shift();
      for (let i=0; i<b.length; i++) {
        if (ch[i]==0) {
          ch[i]=1;
          Abs(a.slice(), b, sum + (tmp*b[i]));
          ch[i]=0;
        }
      }  
    }
  }
  Abs(A,B, 0);
  return answer;
}
// console.log(solution([1, 4, 2], [5, 4, 4]));
console.log(solution([1, 2], [3, 4]));

다른 풀이

그냥 A의 제일 작은 값과 B의 제일 큰값을 곱해서 똑같은 인덱스로 전부 더하면 그게 최소값이래. 그래서 sort만 잘 쓰면 되네...대체 왜!!?!?!??

function solution(A,B){
  A.sort((a,b)=>a-b);
  B.sort((a,b)=>b-a);

  let answer = 0;
  for (let i=0; i<B.length; i++) {
    answer += A[i]*B[i]
  }
  return answer; 
}
// console.log(solution([1, 4, 2], [5, 4, 4]));
console.log(solution([1, 2], [3, 4]));
profile
https://medium.com/@wooleejaan

0개의 댓글