최솟값 만들기

유태형·2022년 2월 8일
0

문제

문제 분석

두 행렬의 요소들을 순서대로 곱해서 최종 값이 최소여야 하는 문제이다. 곱들의 합이 최소가 되기 위해선 순서가 필요해 보인다. 정렬이 필요하다.


풀이

Arrays

막상 배울땐 어영 부영 넘어간 API부분이 코테연습할땐 아쉽고 더 열심히 할껄 싶다. 직접 정렬을 구현해되 되겠지만 사실 기억도 잘 안나고 막상 테스트볼땐 시간도 없을것 같으니 API로 정렬을 외우는게 더 효과적일것 같다.

import java.utils.Arrays;

로 자바로 배열과 관련된 API를 호출할 수 있게 임포트 한다.

Arrays.sort(A); //A배열 정렬
Arrays.sort(B); //B배열 정렬

Arrays.sort(배열)메소드로 간단히 배열의 요소들을 오름차순으로 정렬할 수 있다. 매우 유용한것 같다.

곱셈

곱들의 합이 최소가 되기 위해선 어떻게 해야 할까? 순차적으로 최대요소들과 최소요소들을 곱하면 합이 가장 작은 수일 것이다. 그러기 위해선 A배열에선 최소를 B배열에선 최대를 각각 가져왔다.

	for(int i=0;i<counter;i++){
       answer += (A[i] * B[길이-1]);
 	}

B배열은 오름차순으로 정렬되어있으니 역순으로 읽으면 내림차순이 될 것이다.


코드

import java.util.Arrays; //배열 패키지

class Solution
{
    public int solution(int []A, int []B)
    {
        int answer = 0;
        int counter = A.length;
        
        Arrays.sort(A); //정렬
        Arrays.sort(B); //정렬
        
        
        //두수의 곱이 최소가 되려면 최대와 최소를 곱해야 함
        for(int i=0;i<counter;i++){
            answer += (A[i] * B[counter-i-1]); //counter-1은 마지막 요소index가 길이-1이므로
        }
        return answer;
    }
}

GitHub

https://github.com/ds02168/Study_Algorithm/blob/master/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/%EC%9E%90%EB%B0%94/Level2/%EC%B5%9C%EC%86%9F%EA%B0%92%20%EB%A7%8C%EB%93%A4%EA%B8%B0.txt

profile
오늘도 내일도 화이팅!

0개의 댓글

관련 채용 정보