본문 바로가기

알고리즘/[프로그래머스]Lv.0

[프로그래머스]Lv .0 최댓값 만들기 (2)

본 페이지는 C++ 독학을 위해 작성한 포스트입니다 풀이과정도 포함되어있지만 문법공부에 대한 비중이 있습니다.
(+  Java언어 내용도 포함되어있을 수 있습니다. )

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/120862?language=java

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1.문제설명

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

 

2. 문제해결 접근

  • 배열 요소로서 최대값을 구하고자 한다 -> 가장 큰 값의 곱
  • sort함수를 이용해 정렬하여 (가장 마지막 요소)와 (그 앞 요소)의 곱을 반환한다
  • 요소의 값으로 음수가 들어갈 수 있다.....


  • 최대값을 구하므로 값은 양수이다
  • 큰 양수 * 더 큰 양수 / 작은 음수 * 더 작은음수  일때 최대값 연산이 가능하다
  • 큰 양수의 곱을 담는 변수 a와, 작은 음수의 곱을 답는 변수b를 지정하여
  • 두 값 중 최대값을 구하는 max()를 이용하여 최대값을 반환한다.

3.답안 : [언어 :  java ]

import java.util.Arrays;

class Solution {
  
    public int solution(int[] numbers) {
        int answer = 0;
        int positiveProduct = 0;	// 양수의 곱을 담는 변수
        int negativeProduct = 0;	// 음수의 곱을 담는 변수
        
        Arrays.sort(numbers);
        // 만약 음수가 있다면 작은 순서대로 곱은 배열의 0, 1 번에 위치할것이다 해당 값의 곱
        negativeProduct = numbers[0] * numbers[1]; 
        // 양수의 곱은 오름차순 가장 마지막 인덱스와 그 앞 인덱스의 곱으로 이루어진다.
        positiveProduct = numbers[numbers.length-1] * numbers[numbers.length-2];
        
        Math.max()함수를 이용해최대값을 선별하여 answer에 담는다
        answer = Math.max( positiveProduct, negativeProduct);
        
            
        return answer;
    }
}