자바 알고리즘

[알고리즘] 프로그래머스 - 최솟값 만들기

Big Iron 2023. 5. 4. 14:12

1. 조건


image



2. 내 생각


A와 B 배열의 길이는 같기에 하나의 반복문에서 각각 A와 B의 인덱스번호에 맞는 값들을 곱해 더해주면 된다고 생각했었다.

3. 실행 결과


import java.util.Arrays;
import java.util.Collections;

class Solution
{
    public int solution(int []A, int []B) {
        int answer = 0;

        for (int i=0; i<A.length ; i++) {
            answer += A[i] * B[i] ;
        }

        return answer;
    }
}

image


하지만 정답은 아니었고 내가 작성한 코드라면 11이 나오는게 맞는데 왜 기댓값이 10이며 오답인지 확인을 위해 문제를 다시 읽어보았다.

image


슬쩍 읽고 쉽다고 생각해 제대로 읽지 않았던 것이 문제였고 최솟값을 구해야 했다.

4. 개선 결과


import java.util.Arrays;
import java.util.Collections;

class Solution
{
    public int solution(int []A, int []B) {
        int answer = 0;

        Arrays.sort(A);
        Integer[] BInteger = new Integer[B.length];

        for (int i = 0; i < B.length; i++) {
            BInteger[i] = B[i];
        }
        Arrays.sort(BInteger, Collections.reverseOrder());

        for (int i=0; i<A.length ; i++) {
            answer += A[i] * BInteger[i] ;
        }

        return answer;
    }
}

각각의 A와 B 배열을 오름차순과 내림차순 정렬을 한 후 각각의 인덱스번호의 값을 곱해 더해주면 된다고 생각했고 받아오는 배열값을 정렬하고 반복문을 사용했다.


여기서 한 가지 주의할 점은, 오름차순인 Arrays.sort(A);의 경우 그냥 배열인 A를 넣어주면 되지만 내림차순을 해야할 때 객체가 아닌 int 배열을 사용할 수 없다고 한다. 그래서 int 배열을 Integer 배열로 변경 후 사용할 수 있었다.

image