어려운 문제는 아니다, 시간복잡도를 벗어나는 이슈를 피해 적당한 값을 추려놓고 그 중에 선택을 하는 문제이다.
배우지 않았으면 풀지 못했을 문제일것같아 기록함
정수 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 |