알림
본 포스팅은 공부 목적으로 작성된 글이며 상업적 목적으로 절대 사용되지 않았음을 밝힙니다.
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12941
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
길이가 같은 배열 A, B 두개가 있습니다. 각 배열은 자연수로 이루어져 있습니다.
배열 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱합니다. 이러한 과정을 배열의 길이만큼 반복하며, 두 수를 곱한 값을 누적하여 더합니다. 이때 최종적으로 누적된 값이 최소가 되도록 만드는 것이 목표입니다. (단, 각 배열에서 k번째 숫자를 뽑았다면 다음에 k번째 숫자는 다시 뽑을 수 없습니다.)
코드
function solution(A,B){
var answer = 0;
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;
}
풀이
배열의 길이가 같고 배열의 같은 인덱스를 곱하여 누적하여 더하기 때문에, 반복문 하나로 풀이가 가능합니다.
단, 누적한 값의 최솟값을 구해야 하기 때문에, 위처럼 코드를 작성하면 테스트 케이스 1번을 제외한 나머지 문제를 틀리게 되는데요.
이론적으로 큰 수는 제일 작은 수랑 곱해주면서 더해가면 최솟값이 나올 수 있고(테스트 케이스 2번만 봐도),
그렇기 때문에 배열 하나는 오름차순을, 배열 하나는 내림차순을 먼저 해준 뒤 반복문을 돌리면 되는 문제였습니다.
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 큰 수 만들기(JavaScript) (0) | 2022.08.08 |
---|---|
[Programmers] 다음 큰 숫자(JavaScript) (0) | 2022.08.06 |
[Programmers] N개의 최소공배수(JavaScript) (0) | 2022.08.05 |
[Programmers] 체육복(JavaScript) (0) | 2022.08.04 |
[Programmers] 최댓값과 최솟값(JavaScript) (0) | 2022.08.03 |
댓글