본문 바로가기

프로그래머스/lv0

[프로그래머스/Java] 최댓값 만들기 (1)

문제) 최댓값 만들기 (1)

 

https://school.programmers.co.kr/learn/courses/30/lessons/120847

 

프로그래머스

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

programmers.co.kr

 

 

 

나의 풀이 
class Solution {
    public int solution(int[] numbers) {
        int max = Math.max(numbers[0], numbers[1]);
        int secondMax = Math.min(numbers[0], numbers[1]);
        
         for (int i=2; i < numbers.length; i++) {
             if(numbers[i] > max) {
                secondMax = max;
                max = numbers[i];
             } else if (numbers[i] > secondMax && numbers[i] != max) {
                 secondMax = numbers[i];
             } 
         }
    
         return max * secondMax;
    }
}

 

나의 경우 자바에서 정렬하는 메서드를 까먹어서.. 다소 복잡하게 풀이했다.. :) 

 

배열의 첫번째 값이 최댓값일 경우를 대비해서 배열의 첫 번째 값과 두 번째 값 중에서 큰 값을 max, 작은 값을 secondMax에 할당했다.

 

그 다음에, 배열의 세 번째 값부터 배열의 끝까지 반복하여 최댓값과 두 번째로 큰 값을 찾고, 

현재 값이 max보다 크면 max의 값을 secondMax로 이동하고 현재 값을 max에 넣어주었다.

현재 값이 secondMax 값보다 크면서 max의 값과 다른 경우 secondMax에 현재 값을 넣어주었다.

 

그런 다음 최댓값과 두 번재로 큰 값의 곱을 반환.

 

 

 

Arrays.sort() 메서드를 사용하면 문제 풀이를 간단히 해결할 수 있다.

 

다른 풀이
import java.util.Arrays;

class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        
        Arrays.sort(numbers);
        answer = numbers[numbers.length-1] * numbers[numbers.length-2];
        
        return answer;
    }
}

 

Arrays.sort()를 사용해 오름차순 정렬해준 후, 나열된 마지막 원소 2개를 곱해주고 반환.