
이중 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;
int min1 = Integer.MAX_VALUE, min2 = Integer.MAX_VALUE;