[프로그래머스] 최댓값 만들기(1)

Walter Mitty·2022년 10월 22일
0

Algorithm

목록 보기
16/29

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


제한사항
0 ≤ numbers의 원소 ≤ 10,000
2 ≤ numbers의 길이 ≤ 100


입출력 예
numbers result
[1, 2, 3, 4, 5] 20
[0, 31, 24, 10, 1, 9] 744

numbersresult
[1, 2, 3, 4, 5]20
[0, 31, 24, 10, 1, 9]744

입출력 예 설명

입출력 예 #1

  • 두 수의 곱중 최댓값은 4 * 5 = 20 입니다.

입출력 예 #1
-두 수의 곱중 최댓값은 31 * 24 = 744 입니다.


내 풀이

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=1; j<=numbers.length-1; j++) {
                if(i<j && numbers[i]*numbers[j] > answer) {
                    answer = numbers[i]*numbers[j];
                }
            }
        }
        // [0][1] 
        // [0][2] [1][2]
        // [0][3] [1][3] [2][3]
        // [0][4] [1][4] [2][4] [3][4]
        // i = 0 일 때, j=는 1 부터 시작하고, i < j 의 조건을 달아서 중복되는 값을 피했다.
        return answer;
    }
}
//0.01ms 나온다

처음에 문제풀이를 위해서 라이브러리를 사용하지 않고 하드코딩했을 때는
i = 0 일때, j = 1부터 증가하고 반복횟수는 Array의 길이부터 하나씩 줄어든다고 생각했다.
그래서 for문을 세번이나 써야할까? 생각했는데, 조금더 생각해보니
i < j 보다 작다는 조건을 하나 더 붙여주면, 자연스럽게 반복횟수가 적어진다는걸 떠올렸다.


나의 다른 풀이 - Arrays.sort 사용

import java.util.Arrays;
class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        Arrays.sort(numbers);

        answer = numbers[numbers.length-1]*numbers[numbers.length-2];
        return answer;
    }
}
//0.34ms 가 나온다! 

비록 Run time이 더 오래걸리지만, 라이브러리를 활용한 코드!
Arrays.sort( )를 사용해 오름차순을 해준 후, Array.length-1 의 자리에 있는 수가 가장 큰 수일 테고, Array.length-2가 두번째로 큰 수일 테니 두개를 곱해주면 된다고 생각했다.

0개의 댓글