알고리즘 공부/프로그래머스
(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));
}
}