CodingTest/Programmers

최대값 만들기 [프로그래머스 코딩테스트 입문]

Hojung7 2025. 2. 11. 14:49

문제 설명

 

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

 

 

 

 제한 사항

  • 0 ≤ numbers의 원소 ≤ 10,000
  • 2 ≤ numbers의 길이 ≤ 100

 

 

 입출력 예

numbers result
[1, 2, 3, 4, 5] 20
[0, 31, 24, 10, 1, 9]  744

 

 

 

 입출력 예 설명

 

입출력 예 #1
두 수의 곱중 최댓값은 4 * 5 = 20 입니다.


입출력 예 #2
두 수의 곱중 최댓값은 31 * 24 = 744 입니다.

 

 

 

 풀이

 

1. max1과 max2를 0으로 초기화 해줍니다.

 (max1 = 현재까지 찾은 가장 큰 값

  max2 = 현재까지 찾은 두 번째로 큰 값)

 

2. for문을 사용해 numbers 배열을 순회합니다.

 

3. 현재 숫자 num이 max1 보다 크다면 (새로운 최대값을 찾았다면) 두 번째로 큰 값 max2을 업데이트 해줍니다.

 → 기존 max1 값을 max2로 옮겨주고 새로운 최대값(num)을 max1에 저장

 

4. num이 max1보다 크진 않지만 max2 보다는 크다면 max2 = num;으로 업데이트 해줍니다.

 

5. 가장 큰 두 수를 곱한 결과를 반환해줍니다.

 

class Solution {
    public int solution(int[] numbers) {
        int max1 = 0, max2 = 0; // 가장 큰 두 수 저장
        
        for(int num : numbers){
            if(num > max1){
                max2 = max1;
                max1 = num;
            }else if(num > max2){
                max2 = num;
            }
        }
        return max1 * max2;      

    }
}