새소식

Programmers Coding Test/Java

[프로그래머스 120862] Java - 코딩테스트 입문 / 최댓값 만들기 (2)

  • -

 

최댓값 만들기(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)  느낀점

정렬을 이용해서 생각보다 쉽게 풀 수 있었던 문제엿습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.