최댓값 만들기(2)
https://school.programmers.co.kr/learn/courses/30/lessons/120862
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1) 문제
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
제한사항 -10,000 ≤ numbers의 원소 ≤ 10,000 2 ≤ numbers 의 길이 ≤ 100
2) 예시
Result Table
numbers
result
[1, 2, -3, 4, -5]
15
[0, -31, 24, 10, 1, 9]
240
[10, 20, 30, 5, 5, 20, 5]
600
입출력 예 #1 두 수의 곱중 최댓값은 -3 * -5 = 15 입니다. 입출력 예 #2 두 수의 곱중 최댓값은 10 * 24 = 240 입니다. 입출력 예 #3 두 수의 곱중 최댓값은 20 * 30 = 600 입니다.
3) 풀이
1. 클래스 선언을 해줍니다
● class Solution {
클래스명은 대문자로 시작해야하고, 정답이라는 의미로 Solution이라는 단어를 사용하였습니다.
2. 정수배열 numbers를 매개변수로 하는 numbers 메소드를 선언합니다.
solution은 정수를 반환하므로 데이터타입을 int으로 합니다.
● public int solution(int[] numbers) {
3. 정답인 정수 answer를 생성하고 초기화해줍니다.
● int answer = 0;
4. sort 메소드를 이용해서 정수배열 numbers를 정렬해줍니다.
숫자가 정렬될 경우, 오름차순 순으로 정렬되기 때문에 낮은 숫자부터 큰 숫자순으로 나열됩니다.
● Arrays.sort(numbers);
5. 일단 두가지 조건으로 나눕니다.
numbers는 음수와 양수가 둘다 될 수 있기 때문에,
(음수인 가장 작은수 두개의 곱) 그리고 (양수인 가장 큰 수 두개의 곱) 을 비교하여 크기를 비교합니다.
첫번째 조건으로 양수인 가장 큰 수 두개의 곱이 클 경우, 그 값이 answer과 되도록,
(여기서 마지막 원소는 length번째 원소가 아니라 length-1번째 원소 이므로 헷갈리지 않을 것)
그렇지 않으면 음수인 가장 작은 수 두개의 곱이 클 경우, 그 값이 answer가 되도록 합니다.
최종적으로 결과값 answer를 반환합니다.
● if (numbers[0] * numbers[1] <= numbers[numbers.length - 1] * numbers[numbers.length - 2]) { answer = numbers[numbers.length - 1] * numbers[numbers.length - 2]; } else { answer = numbers[0] * numbers[1]; } return answer; } }
4) 코드
import java.util.*;
class Solution {
public int solution(int[] numbers) {
int answer = 0;
// numbers 배열을 정렬해서 오름차순으로 만들자
// 그리고 맨 마지막 원소 * 그 앞원소를 하게되면 최댓값이 됨
// 하지만 원소가 음수일 수 있다는 것이 함정이므로
// 오름차순 후 첫번째와 두번째 원소의 곱을 곱한 값과도 비교해보자.
Arrays.sort(numbers);
if (numbers[0] * numbers[1] <= numbers[numbers.length - 1] * numbers[numbers.length - 2]) {
answer = numbers[numbers.length - 1] * numbers[numbers.length - 2];
} else {
answer = numbers[0] * numbers[1];
}
return answer;
}
}
5) 느낀점
정렬을 이용해서 생각보다 쉽게 풀 수 있었던 문제엿습니다.