본문 바로가기
Study with me/프로그래머스 L0 마스터하기

프로그래머스 - L0 최댓값만들기(2)

by 외계나무 2024. 1. 1.

프로그래머스 - level 0 최댓값 만들기 (2)

가장 간단한 방식으로 풀었음.

처음에는 반환값이 음수일 가능성을 고려해서 answer 초기값을 -9999로 설정했으나 7번 테스트 케이스에서 통과하지 못해서 그냥 이렇게 수정함. 뭘 얼마나 큰 음수를 해놓은 거야...?

class Solution {
    public int solution(int[] numbers) {
        int answer = numbers[0]*numbers[1];
        for(int i=0; i<numbers.length-1; i++) {
            for(int j=i+1; j<numbers.length; j++) {
                if (answer < numbers[i]*numbers[j])
                    answer = numbers[i]*numbers[j];
            }
        }
        return answer;
    }
}

 

아이디어가 너무 좋았던... 왜 이렇게 생각해보지 못했지 싶은... 타인의 풀이 참고.

import java.util.*;

class Solution {
    public int solution(int[] numbers) {
        int len = numbers.length;
        
        Arrays.sort(numbers);
        
        return Math.max(numbers[0]*numbers[1], numbers[len-1]*numbers[len-2]);
    }
}

생각해보면 간단한데, 정수 범위 배열에서 두 원소의 곱이 가장 크려면,

1) 배열에 원소가 둘 밖에 없는 게 아닌 이상,

2) 가장 작은 두 수가 음수여서 그 곱이 가장 크거나

3) 가장 큰 두 수의 곱이 나오는 수 밖에 없다.

그러니 배열을 정렬하고, 가장 작은 두 수의 곱과 가장 큰 두 수의 곱을 비교해서 큰 값을 반환하면 되는 것이다.

좀 더 생각해보고 타인의 풀이를 보면 좋을텐데 늘 손이 더 빠르게 저질러 버린다. 새해에는 인내심을 길러보아요^^...