https://school.programmers.co.kr/learn/courses/30/lessons/12941
나의 풀이
function solution(A,B){
A.sort((a,b) => a -b)
B.sort((a,b) => b -a)
let sum = 0
for(i=0; i<A.length; i++)sum += (A[i] * B[i])
return sum ;
}
처음에는 이거보다 복잡하게 풀었는데 틀렸다고 해서 봤는데 문제를 내가 제대로 이해를 못했다.
여기서 핵심은 처음에는 각 배열에서 같은 index를 뽑아도 된다. 하지만 그 다음에는 안 된다.
따라서 처음에 각 배열에서 indx 0인 숫자를 뽑았다면 다음은 각 배열에서 index 1 인 숫자를 뽑을 수 없다.
한쪽으 index 1 다른 한쪽은 처음에 뽑은 0과 방금 다른 배열에서 뽑은 1은 뽑으면 안 된다.
그런데 질문하기에서 이런 글을 봤다.
여러가지 숫자가 각각 있을때 중복으로 뽑을 수 없고 각 뽑은 수를 곱할때
A * B = C
여기서 C의 모든 합을 더할 때 최솟값이 나오게 할려면 한쪽은 최솟값 다른 한쪽은 최댓값을 넣어주면 된다.
그래서 실제로 해봤다. (위 문제 조건 일단 무시)
[4, 7]
[3, 8]
4*3 = 12
7*8 = 56
---
4*8 = 32
7*3 = 21
최소 * 최소 & 최대 * 최대 = 68
최대 * 최소 = 53
이렇게 최댓값 * 최솟값을 한뒤 모두 더하면 그게 최솟값이 된다.
따라서 sort를 사용한 것이다.
'알고리즘 > 프로그래머스 - JS' 카테고리의 다른 글
[프로그래머스] level.2 다음 큰 숫자 (0) | 2022.09.24 |
---|---|
[프로그래머스] level.2 올바른 괄호 (0) | 2022.09.24 |
[프로그래머스] level.2 이진 변환 반복하기 (0) | 2022.09.22 |
[프로그래머스] level.2 최댓값과 최솟값 (0) | 2022.09.22 |
[프로그래머스] level.2 타켓 넘버 ( 이걸본다면 단숨에 이해 가능!!) (1) | 2022.09.20 |