[프로그래머스_ Java_Lv0] 최댓값 만들기. Arrays.sort, Math.max

박경희·2024년 1월 30일

코딩테스트

목록 보기
29/69

이중 for문(좋은 예는 아니다)

public int solution(int[] numbers) {
        int max = 1;

        for (int i = 0; i < numbers.length -1; i++) {
            for (int j = i +1; j <= numbers.length-1; j++) {
                if (numbers[i] * numbers[j] > max) {
                    max = numbers[i] * numbers[j];
                }
            }
        }
        return max;
    }

Arrays.solt

public static int  solution(int[] numbers) {
        Arrays.sort(numbers);

        int n = numbers.length;
        return Math.max(numbers[n -1] * numbers[n -2], numbers[0] * numbers[1]);
    }
  • 가장 큰 두 수의 곱 vs 가장 작은 두 수의 곱(음수 고려)
  • 정렬 후, 최댓값을 빠르게 찾을 수 있다.
    - 양수의 경우 → 가장 큰 두 수의 곱
    - 음수의 경우 → 가장 작은 두 수(음수 두 개)의 곱
    - 두 경우 중 더 큰 값을 선택.

for (n < 100)일 경우 정렬보다 빠르다.

public static int  solution(int[] numbers) {
      for (int num : numbers) {
    if (num > max1) { // 최댓값 갱신
        max2 = max1;
        max1 = num;
    } else if (num > max2) {
        max2 = num;
    }

    if (num < min1) { // 최솟값 갱신 (음수 처리)
        min2 = min1;
        min1 = num;
    } else if (num < min2) {
        min2 = num;
    }
}
int max1 = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE; // 최댓값 2개
int min1 = Integer.MAX_VALUE, min2 = Integer.MAX_VALUE; // 최솟값 2개

0개의 댓글