[프로그래머스] [Level.2]코딩테스트 - 최솟값 만들기 (Javascript)

아카시아·2021년 10월 31일
0

알고리즘

목록 보기
28/30

문제

출처 : https://programmers.co.kr/learn/courses/30/lessons/12941

내 풀이

function solution(A, B) {
  let answer = 0;
  let minNum, minIndex, maxNum, maxIndex;

  for (let i = A.length; i > 0; i--) {
    A.map((num, index) => {
      if (index === 0) {
        minNum = num;
        minIndex = index;
      }
      if (num < minNum) {
        minNum = num;
        minIndex = index;
      }
    });

    B.map((num, index) => {
      if (index === 0) {
        maxNum = num;
        maxIndex = index;
      }
      if (num > maxNum) {
        maxNum = num;
        maxIndex = index;
      }
    });

    answer += minNum * maxNum;
    A.splice(minIndex, 1);
    B.splice(maxIndex, 1);
  }
  return answer;
}
  • 코드를 짜면서도 내가 너무 비효율적으로 짜고 있다고 생각했는데 아니나 다를까 정확성 테스트에서는 통과가 되었지만 효율성 테스트에서는 하나도 통과하지 못했다..

다른 분의 풀이

function solution(A,B){
  let answer = 0;

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


for(let i=0; i<A.length; i++){
  answer = answer + A[i]*B[i];
}
  
    return answer;
}
  • 다른 분의 풀이를 보고 '이렇게 단순하게 풀릴 수 있는 문제를 왜 이렇게 복잡하게 생각했을까'라는 생각을 했다. A의 연속되는 최솟값들과 B의 연속되는 최댓값들을 곱하고 다 더하면 된다는 생각은 했는데 각각의 최솟값과 최댓값을 배열에서 제거해야된다고 생각하고 접근한게 패인이었던 것 같다. sort메서드로 간단히 해결할 수 있는 문제였다. 앞으로는 머리속에 일차적으로 든 생각대로 바로 코드를 짜지말고 여러 방법을 고민하고 그 중 가장 최선을 선택해 풀어야겠다.
profile
낭만적인 개발자

0개의 댓글