가장 간단한 방식으로 풀었음.
처음에는 반환값이 음수일 가능성을 고려해서 answer 초기값을 -9999로 설정했으나 7번 테스트 케이스에서 통과하지 못해서 그냥 이렇게 수정함. 뭘 얼마나 큰 음수를 해놓은 거야...?
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=i+1; j<numbers.length; j++) {
if (answer < numbers[i]*numbers[j])
answer = numbers[i]*numbers[j];
}
}
return answer;
}
}
아이디어가 너무 좋았던... 왜 이렇게 생각해보지 못했지 싶은... 타인의 풀이 참고.
import java.util.*;
class Solution {
public int solution(int[] numbers) {
int len = numbers.length;
Arrays.sort(numbers);
return Math.max(numbers[0]*numbers[1], numbers[len-1]*numbers[len-2]);
}
}
생각해보면 간단한데, 정수 범위 배열에서 두 원소의 곱이 가장 크려면,
1) 배열에 원소가 둘 밖에 없는 게 아닌 이상,
2) 가장 작은 두 수가 음수여서 그 곱이 가장 크거나
3) 가장 큰 두 수의 곱이 나오는 수 밖에 없다.
그러니 배열을 정렬하고, 가장 작은 두 수의 곱과 가장 큰 두 수의 곱을 비교해서 큰 값을 반환하면 되는 것이다.
좀 더 생각해보고 타인의 풀이를 보면 좋을텐데 늘 손이 더 빠르게 저질러 버린다. 새해에는 인내심을 길러보아요^^...
'Study with me > 프로그래머스 L0 마스터하기' 카테고리의 다른 글
프로그래머스 - L0 인덱스바꾸기 (0) | 2024.01.02 |
---|---|
프로그래머스 - L0 문자열정렬하기(1) // String → char → int (0) | 2024.01.02 |
프로그래머스 - L0 x사이의개수 (0) | 2023.12.29 |
프로그래머스 - L0 할일목록 (0) | 2023.12.28 |
프로그래머스 - L0 배열의원소삭제하기 (0) | 2023.12.27 |