[JavaScript][Programmers] 최솟값 구하기

조준형·2021년 8월 25일
0

Algorithm

목록 보기
86/142
post-thumbnail

🔎 최솟값 구하기

❓ 문제링크

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

📄 제출 코드

function solution(A,B){
  A.sort((a, b) => { return a - b });
  B.sort((a, b) => { return b - a });
  
  let answer = A.reduce((acc, n, idx) => {return acc+= n*B[idx]},0);

  return answer;
}
let A = [1, 4, 2];
let B = [5, 4, 4];
console.log(solution(A,B));

문제를 읽고 최소값을 구하는 경우고 한 쪽은 오름차순으로 정렬하고, 한 쪽은 내림차순으로 정렬해서 순서대로 더하면 되겠다 생각하고 구현했다.
초기에는 A와 B를 정렬한 배열 arr_A,arr_B변수를 따로 둬서 result배열에 정렬의 합을 담아서 result배열안의 합을 구했다.
이때 reduce를 이용해 구했는데, 효율성 4번 5번에서 시간초과가 떳고, forEach를 사용하니까
1번만 실패했다.
뭐지? 하고 그냥 for문으로 돌리니까 다 시간초과가 떳다.
???????????????????????????????
배열을 정렬하지 않고, Math.min,max를 써서 그걸 또 어딧는지 index를 찾아서 더해나가는 건 효율성이 더 떨어질거 같아 먼저 arr_A,arr_B를 지웠다.
그 다음 result가 문제인거같아 reduce를 answer에 바로 담아서 결과를 출력하니 통과하였다.

mdn에서 아래 코드를 참고해서 만들었다.

[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array) {
  return accumulator + currentValue;
});
let answer = A.reduce((acc, n, idx) => {return acc+= n*B[idx]},0);

acc에다가 값을 저장해두고, 초기값은 0으로 set한다.
n이 A배열의 값이고, idx는 인덱스값이다.
우리가 구할건 ab의 합이니까 acc에다가 nB[idx]를 해서 answer를 구한다.

📘 참고

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

profile
깃허브 : github.com/JuneHyung

0개의 댓글