정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
import java.util.Arrays;
class Solution {
public int solution(int[] numbers) {
int result = 0;
Arrays.sort(numbers);
result = numbers[numbers.length - 1] * numbers[numbers.length - 2];
return result;
}
}
문제는 Arrays메서드인 오름차순 정렬로 배열을 정렬시키는 메서드 sort()를 이용하여 배열의 마지막 인덱스 와 이전 인덱스를 가지고와 곱하는 식을 세워서 풀었는데 처음에 했던 생각은 for문을 이용하여 배열의 원소들을 직접 가지고 오는것 이었다. 계속 풀 수는 있을 거 같은데 for문 안 if문에 조건식을 어떤식으로 세울지가 계속 머리속에 남았다.
알고리즘 코테 스터디 모임에서 이 문제에 해결법을 푼 사람이 있었다.
class Solution {
public int solution(int[] numbers) {
int answer = 0;
int max = 0 ;
int secMax = 0;
int idx = 0;
for (int i = 0; i < numbers.length; i++) {
if(numbers[i]>max) {
max = numbers[i];
idx = i;
}
}
for (int i = 0; i < numbers.length; i++) {
if(numbers[i]>secMax && i!=idx) secMax=numbers[i]; // 이 부분에서 막혀서 계속 안나왔다
}
answer=max*secMax;
return answer;
}
}
저기서 인덱스라는 변수로 선언해서 만들고 최대값인 해당하는 배열의 인덱스를 제외하는 그런 조건식을 생각을 못했다.
내가 처음에 했던 생각도 맞았고 내가 풀었던 방법도 맞았다. 코테에 자신감? 이라는게 생긴거 같고 좀 더 창의적인 생각도 해봄직 하겠다. 다양한 풀이방법도 배우고 다른 사람이 어떤 방식으로 풀었는지 보는것도 하나의 배움인 거 같다.