최댓값 만들기(2) [CT]

성배·2025년 1월 23일
0

코딩테스트

목록 보기
35/53

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.

생각한 풀이
1. 배열로 입력받은 값들 중에서 가장큰 두수의 곱을 찾아야하니 sort후 length-1,-2를 곱하자
2. 아니면 그냥 이중 for문으로 값이 가장 큰값을 찾는다


import java.util.Arrays;
class Solution {
    public int solution(int[] numbers) {
        
        int answer = numbers[0]*numbers[1];

        for (int i=0;i<numbers.length;i++) {
            for (int j=i+1;j<numbers.length;j++) {
                if (numbers[i]*numbers[j]>answer) {
                    answer=numbers[i]*numbers[j];
                }
            }
        }
        return answer;
    }
}

🐴 풀이
1. 최댓값을 찾기 위해 초기 값을 numbers[0]*numbers[1]로 설정
2. for문을 돌면서 j는 i+1로 시작한 인덱스 앞에서부터 곱을 해야하므로 자기자신을 넘기려고 +1을 했다
3. 만약 answer보다 두 수의 곱이 크다면 answer에 값을 넣는다

첫번째 풀이 방법으로 하려니 음수가 포함되어 있을 때 최댓값을 계산하는 방법이 떠로르지 않았다


import java.util.Arrays;

class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        
        Arrays.sort(numbers);

        int f= numbers[0]*numbers[1];
        int e = numbers[numbers.length-2]*numbers[numbers.length-1];

        answer = Math.max(f,e);
        return answer;
    }
}

🐴 풀이
1. 양수의 최대값을 sort로 length -1과 length -2 에 있으니 두 수의 곱으로 나타낼 수 있고
2. 음수의 최댓값은 sort로 0, 1에 있을 것이다.
3. 음수 하나라면 Math.max()로 양수의 곱이 선택
4. 음수가 두개라도 Math.max()로 양수의 곱과 비교해서 출력

다른 사람의 풀이를 보고 따라 해봄

0개의 댓글