csmoon1010의 SW 블로그

[200901] 최솟값만들기 - 연습문제(level2) 본문

Coding Test/프로그래머스

[200901] 최솟값만들기 - 연습문제(level2)

csmoon1010 2020. 9. 1. 20:06

1. 문제 이해

- 배열 A, B : 같은 길이. 자연수로 이루어짐

- A,B에서 각각 한 개씩, 한 번씩 곱해 구한 누적합의 최솟값 return

 

2. 전략

(1) 규칙

: (큰 값) X (큰 값)을 하면 값이 더 커짐

작을수록 큰 값과 곱해지도록 해야함

두 배열을 각각 오름차순, 내림차순 sort한 후 차례로 곱하기

(2) sort

- Arrays.sort()를 이용해 각각 오름차순으로 sort

- A는 0번 index부터, B는 size-2번 index부터 차례로 곱하기

 

3. 참고 사항

- Arrays.sort(arr, Collections.reverseOrder()), Arrays.sort(arr, Comparator.reverseOrder())

: int 배열에 대해서는 적용이 불가. String 배열, ArrayList 컬렉션에 적용해야 이용 가능!

 

+a> PriorityQueue 구현 시 이용함 - PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());

https://esw-csmoon.tistory.com/entry/200419-%ED%9E%99-%EB%94%94%EC%8A%A4%ED%81%AC%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AClevel3

 

4. 코드

import java.util.*;
class Solution
{
    public int solution(int []A, int []B)
    {
        int answer = 0;
        Arrays.sort(A);
        Arrays.sort(B);
        int size = B.length;
        for(int i = 0; i < size; i++){
            answer += A[i]*B[size-i-1];
        }
        return answer;
    }
}
Comments