본문 바로가기

프로그래머스

5/26[문제풀이] 프로그래머스 Lv2 최솟값 만들기

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

 

문제풀이

 

1
2
3
4
5
6
7
8
9
10
11
12
function solution(A,B){
    var result = 0;
    A.sort((a,b) => a-b)
    // console.log(A)
    B.sort((a,b) => b-a)
    // console.log(B)
    
    for(let x=0; x<A.length; x++) {
        result += A[x]*B[x] 
    }
    return result;
}
cs

문제를 보고 각자의 A,B를 오름차순, 내림차순으로 정렬을 한 후 for문을 돌려 서로 곱한 값을 result에 더해 주는 식으로 로직을 생각했는데 그대로 잘 구현이 된 것 같다. 문제를 풀고나니 예외 경우가 있을지도 모른다는 생각이 들긴 한다. 생각 그대로 바로 풀려서 그런가?...

그리고 시간 복잡도 면에 관련해서는 sort를 두 번이나 사용해서 효율성 측면에서 통과를 못할 수도 있다고 생각했는데 통과하니 다행이었다. 퀵정렬시 시간복잡도는 O(nlogn) ~ O(n^2)...

지금 다시 보니 for문을 쓰지 않고 reduce를 사용할 수 있었던 것 같다.

 

1
2
3
result = A.reduce((acc,cur,idx)=>{
    return acc += cur*B[idx]
},0)
cs