알고리즘 공부/프로그래머스

(Java)프로그래머스 코딩테스트 연습 - 연습문제 - 최솟값 만들기

HRuler 2020. 11. 23. 22:35

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/12941?language=java

 

코딩테스트 연습 - 최솟값 만들기

길이가 같은 배열 A, B 두개가 있습니다. 각 배열은 자연수로 이루어져 있습니다. 배열 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱합니다. 이러한 과정을 배열의 길이만큼 반복하며, 두 수를 곱

programmers.co.kr

2. 나의 풀이

import java.util.*;

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

        for(int i = 0; i < A.length; i = i + 1) {
        	int j = B.length - 1 - i;
        	
        	answer += (A[i] * B[j]);
        	
        	//System.out.println("answer : " + answer + ", i : " + i + ", j : " + j);
        }

        return answer;
    }
}

3. 다른 사람 풀이

class TryHelloWorld
{
    public int getMinSum(int []A, int []B)
    {
        int answer = 0;
        int length = A.length;


        quickSort(A, 0, A.length-1);
        quickSort(B, 0, B.length-1);

        //System.out.println(A[0]);
        //System.out.println(B[0]);

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



        return answer;
    }

    public static void quickSort(int[] arr, int left, int right)
    {
        int i, j, pivot, tmp;

        if (left < right) {
            i = left;
            j = right;
            pivot = arr[left];
            //분할 과정
            while (i < j) {
                while (arr[j] > pivot) j--;
                while (i < j && arr[i] <= pivot) i++;

                tmp = arr[i];
                arr[i] = arr[j];
                arr[j] = tmp;
            }
            arr[left] = arr[i];
            arr[i] = pivot;
            //정렬 과정
            quickSort(arr, left, i - 1);
            quickSort(arr, i + 1, right);
        }
    }


    public static void main(String[] args)
    {
        TryHelloWorld test = new TryHelloWorld();
        int []A = {2,1};
        int []B = {4,3};
        System.out.println(test.getMinSum(A,B));
    }
}