알고리즘/코딩 테스트
[코딩 테스트] 누적합 - 프로그래머스 최솟값 만들기
Judith Hopps
2023. 1. 27. 15:03
반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
최솟값 만들기
문제 설명
길이가 같은 배열 A, B 두개가 있습니다. 각 배열은 자연수로 이루어져 있습니다.
배열 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱합니다. 이러한 과정을 배열의 길이만큼 반복하며, 두 수를 곱한 값을 누적하여 더합니다. 이때 최종적으로 누적된 값이 최소가 되도록 만드는 것이 목표입니다. (단, 각 배열에서 k번째 숫자를 뽑았다면 다음에 k번째 숫자는 다시 뽑을 수 없습니다.)
더보기
잘못된 풀이
1. A는 오름차순, B는 내림차순 정렬하여 하나씩 곱함
틀린 이유!!
arr.sort는 arr.sort((a,b) => a-b) 이렇개 해야함!!
function solution(A,B){
//1. A는 오름차순, B는 내림차순 정렬하여 하나씩 곱함
let psum = [0]; A.sort; B.sort().reverse();
for (let i=0;i <A.length;i++) {
psum[i+1] = psum[i] + B[i]*A[i];
}
return psum.at(-1);
}
function solution(A,B){
//2. sort 메서드 이용
let answer = 0;
A.sort((a,b) => a-b);;
B.sort((a,b) => b-a);
A.forEach((_,i )=> answer += A[i]*B[i])
return answer
}
또는 reduce 메서드를 이용하여 변수 선언없이 문제를 풀 수 있다.
function solution(A,B){
A.sort((a,b) => a-b);
B.sort((a,b) => b-a);
return A.reduce((pre,cur,i)=>{return pre + cur*B[i]},0)
}
반응형