Blog

최댓값 만들기 (2)

문제 #

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.

numbers의 원소는 음수일 수 있다.

  • 제한사항
    • -10,000 ≤ numbers의 원소 ≤ 10,000
    • 2 ≤ numbers 의 길이 ≤ 100
  • 입출력 예
    numbers result
    [1, 2, -3, 4, -5] 15
    [0, -31, 24, 10, 1, 9] 240
    [10, 20, 30, 5, 5, 20, 5] 600

나의 풀이 #

import java.util.*;

class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        int desc = 0;
        int asc = 0;
        
        Arrays.sort(numbers);
        desc = numbers[0]*numbers[1];
        asc = numbers[numbers.length-1]*numbers[numbers.length-2];
        
        answer = desc >= asc? desc : asc;
        
        return answer;
    }
}
  • 주어진 numbers 배열을 오름차순으로 정렬
  • 첫 번째 원소와 두 번째 원소를 곱한 값을 desc 변수에 저장
  • 마지막 원소와 마지막에서 두 번째 원소를 곱한 값을 asc 변수에 저장
  • 그리고 descasc 중에서 더 큰 값을 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 - 2] * numbers[len - 1]);
    }
}
  • 다른 사람의 풀이는 length 변수를 이용하여 배열의 길이를 저장하고, Math.max 함수를 이용하여 두 값을 비교하는 방식으로 구현되어 있다.
  • Math.max(a, b) 함수는 a와 b 중에서 더 큰 값을 반환한다.
  • 즉, numbers[0] * numbers[1]numbers[len - 2] * numbers[len - 1] 두 값을 Math.max 함수에 넣어 더 큰 값을 반환하게 된다.
  • 따라서, 더 간결하고 코드의 길이가 짧은 풀이이다.

관련개념 학습 #

  • 관련 개념을 찾아서 공부한 내용을 적는다.
  • ctrl + p로 내가 필기한 내용 중에서 관련내용이 있는지 찾아서 그 페이지의 링크를 복사하여 붙혀넣는다.
  • 필기 페이지에도 이 문제의 링크를 복사하여 “관련 문제"라고 써놓고 붙혀넣는다.