코딩테스트/문제풀이

[코드트리] 세 수의 최대 곱

알렉스 페레이라 2023. 5. 14. 17:21

어려운 문제는 아니다, 시간복잡도를 벗어나는 이슈를 피해 적당한 값을 추려놓고 그 중에 선택을 하는 문제이다.

배우지 않았으면 풀지 못했을 문제일것같아 기록함

 


정수 n과 n개의 수가 주어졌을 때, 3개의 숫자를 적절하게 골라 나올 수 있는 곱 중 최대값을 구하는 프로그램을 작성해보세요.

 

입력 형식

첫 번째 줄에 정수 n이 주어집니다.

두 번째 줄에 n개의 정수가 공백을 사이에 두고 주어집니다.

  • 3 ≤ n ≤ 100,000
  • -1,000 ≤ 주어지는 수 ≤ 1,000

 

출력 형식

첫 번째 줄에 3개의 숫자를 적절하게 골라 나올 수 있는 곱 중 최대값을 출력합니다.

 

입출력 예제

예제1

입력:

12
10 -5 -2 4 -9 15 -3 6 0 7 1 -20

출력:

2700

 

예제 설명

-20, -9, 15를 추출하여 곱했을 때, 가장 큰 수인 2700을 얻을 수 있습니다.


내 코드 

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        int[] arr = new int[n];
        boolean existZero = false;
        for(int i = 0; i < n; i++){
            arr[i] = sc.nextInt();
            if(!existZero && arr[i] == 0){
                existZero = true;
            }
        }

        Arrays.sort(arr);

        //양수 세개인 경우
        int num1 = arr[n-1] * arr[n-2] * arr[n-3];

        //0이 하나 있다면? 0이 최대인 경우
        int num2 = existZero ? 0 : Integer.MIN_VALUE;

        //양수하나 음수 두개인 경우(음수 두개가 아니여도 로직에 영향을 주지 못한다)
        int num3 = arr[n-1] * arr[0] * arr[1];

        System.out.print(Math.max(num1, Math.max(num2, num3)));
    }
}

'코딩테스트 > 문제풀이' 카테고리의 다른 글

[코드트리] 수열의 순서 바꾸기  (1) 2023.05.15
[코드트리] 홀수 짝수의 묶음  (1) 2023.05.15
[코드트리] ABC 줄 세우기  (1) 2023.05.12
[코드트리] X 달리기  (0) 2023.05.09
[코드트리] 코딩톡  (0) 2023.05.09