문제
https://school.programmers.co.kr/learn/courses/30/lessons/12941
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이
일차적인 풀이는 우선 최소의 합을 만들기 위해 큰 수, 작은 수로 정렬하여 곱해준걸 합산한다.
function solution(A,B){
let answer = 0;
//곱한게 최소가 되려면, 큰 수 * 작은 수
const BigA = Math.max(...A)
const BigB = Math.max(...B)
if(BigA > BigB) {
const sortA = A.sort((a,b) => b-a)
const sortB = B.sort((a,b) => a-b)
sortA.forEach((x,i) =>{
answer+= x * sortB[i]
})
} else {
const sortA = A.sort((a,b) => a-b)
const sortB = B.sort((a,b) => b-a)
sortA.forEach((x,i) =>{
answer+= x * sortB[i]
})
}
return answer;
}
A의 최댓값이 크나 B의 최댓값이 크나 상관없이 하나는 오름차순, 다른 하나는 내림차순으로 해주면 되기에
조건문을 제거하고 정렬 후 반복문만 남겼다.
function solution(A, B) {
let answer = 0;
// A는 오름차순, B는 내림차순으로 정렬
A.sort((a, b) => a - b);
B.sort((a, b) => b - a);
// 정렬 후, 각 요소의 곱을 누적
for (let i = 0; i < A.length; i++) {
answer += A[i] * B[i];
}
return answer;
}
반복문도 결국 합산을 위해 사용하는 것이니 reduce로 누적하는걸로 수정
function solution(A, B) {
const sortA = A.sort((a,b) => a-b);
const sortB = B.sort((a,b) => b-a);
return sortA.reduce((sum, curr, i) => sum + curr * sortB[i], 0);
}
'개발 > 알고리즘(코딩테스트)' 카테고리의 다른 글
프로그래머스, 자바스크립트) 올바른 괄호 (0) | 2024.11.18 |
---|---|
프로그래머스, 자바스크립트) JadenCase 문자열 만들기 (0) | 2024.11.17 |
프로그래머스, 자바스크립트) 최댓값과 최솟값 (1) | 2024.11.14 |
프로그래머스, 자바스크립트) 숫자의 표현 (3) | 2024.11.13 |
프로그래머스, 자바스크립트) 삼총사 (0) | 2024.11.12 |