본문 바로가기

자료구조 & 알고리즘 & cs/CodingTest

[python/java] 프로그래머스 Lv2. - 최솟값 만들기

코딩테스트 연습 - 최솟값 만들기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

파이썬으로는 배열의 정렬을 사용하여 매우 간단하게 풀었다.

 

[python]

def solution(A,B):
    answer = 0

    A.sort()
    B.sort(reverse=True)
    
    for i in range(len(A)):
        answer += A[i]*B[i]    

    return answer

 

그런데 자바를 사용할 경우 이슈가 발생했다.

기존에 알고있던 Arrays.sort()Arrays.sort(arr, Collections.reverseOrder())을 사용하여 정렬을 하려고 했는데

계속 에러가 났다.

no suitable method found for sort(int[],Comparator<Object>)

구글링 해보니

Comparator는 원시 타입의 int 배열에서는 사용할 수 없었다.

대신, 객체 배열에서는 사용이 가능하기 때문에 int[]를 integer[]로 변환하거나 다른 정렬 알고리즘을 사용하거나 해야했다.

* 이 부분에 대해 따로 포스팅 할 예정이다.

 

[java]

import java.util.Arrays;
import java.util.Collections;
class Solution
{
    public int solution(int []A, int []B)
    {
        int answer = 0;
       
        Arrays.sort(A);
        // Integer[] Br = Arrays.stream(B).boxed().toArray(Integer[]::new);
        // Arrays.sort(Br, Collections.reverseOder());
        Arrays.sort(B);
        
        for(int i=0;i<A.length;i++){
            answer += A[i] * B[B.length-i-1];  
        }

        return answer;
    }
}

주석된 부분은 int[]를 integer[]로 변환한 부분인데 하나의 테스트 케이스에서 시간초과가 났다.

그래서 그냥 정렬해준 다음 인덱스를 바꿔주는 방식을 통해 해결하였다.

 

 

728x90