[프로그래머스] 최솟값 만들기 Lv2

GoGoDev·2021년 12월 29일
0

Programmers Lv.2🌼

목록 보기
1/3

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

나의 풀이(정확성, 효율성 실패)

function solution(A,B){
    var answer = 0;
    A.sort();
    B.sort();
    for(let i= 0; i < A.length; i++){
        for(let j = A.length - 1; j >= 0; j--){
            answer += A[i] * B[j]
            A.shift()
            B.pop()
        }
    }
    return answer;
}

테스트 케이스만 통과한 셈이다..
정렬을 사용하니 시간 초과가 뜬다.

나의 또 다른 풀이

function solution(A,B){
    var answer = 0;
    A.sort();			// 오름차순
    B.sort((a,b)=>b-a); // 내림차순
    for(let i = 0; i < A.length; i++){
        answer += A[i] * B[i]
    }
    return answer;
}

이 또한 테스트 케이스만 맞고 정확성, 효율성에서 실패하였다.
하지만
A.sort()를 A.sort((a,b)=>a-b)로 변경하면 정답 처리가 되었다.

A.sort()와 A.sort((a,b)=>a-b) 둘 다 오름차순으로 정렬된다고 생각하여 차이가 없다고 생각하였는데 아니었다.
JS에서 sort() 함수는 ASCII문자 순서대로 정렬된다.

let arr = [1,4,10,2,11]
arr.sort() // 1,10,11,2,4
arr.sort((a,b)=>a-b) // 1,2,4,10,11

[1,4,10,2,11] 인 배열이 있을 때,
sort() 함수는 [1,10,11,2,4]로 정렬이 된다. (두자릿수 이상부터는 정렬에 대한 오류가 발생)
정확한 오름차순을 위해서는 sort((a,b)=>a-b)를 사용하도록 하자.

다른 분의 풀이

function solution(A,B){
    A.sort((a, b) => a - b)
    B.sort((a, b) => b - a)
    return A.reduce((total, val, idx) => total + val * B[idx], 0)
}

reduce를 사용한 풀이

profile
🐣차근차근 무럭무럭🐣

0개의 댓글