middlemoon

[입문]자바 - 최댓값 만들기(1). 본문

Algorithm/프로그래머스 Java 입문

[입문]자바 - 최댓값 만들기(1).

중대경 2025. 8. 26. 18:27

 

 

 

답안 ) 

 

class Solution {
    public int solution(int[] numbers) {
        int first = Integer.MIN_VALUE;
        int second = Integer.MIN_VALUE;
        
        for(int num : numbers){
            if(num > first){
                second = first;
                first = num;
            }else if(num > second){
                second = num;
            }
        }
        int answer = first * second;
        return answer;
    }
}

 

 

 

과정 ) 

 

최댓값을 만드는 문제이다. 

 

입출력에서 보면 알듯이 두 수 곱의 최대값이 나와야하기 때문에 파라미터는 두개를 생성해줘야한다.

일단 first의 수도 최소값으로 나와야한다. 

배열 [3,7,5]인 과정에서 numbers 파라미터값에 담긴 배열들이 돌면서 첫번째 first로 들어오게 된다.

그렇게 5까지 돌면서 마지막 first 자리에 7가 들어오게 되고, second는 5가 들어오게 되는 형식이다.

 

 

첫번째는 당연히 맨 처음이 3이 맞다. 처음들어오는 수이기 때문에

그 다음 num=7이 들어오게 되면 자연스레 3은 second자리에 밀려나는 형태이다. 

 

 

그렇다면 왜 first = second;가 안되는 것인가?

 

 

(first = second)
→ 기존 first 값이 사라져버리고 second에는 아무 것도 안 남음
→ 결국 두 번째 큰 값을 잃어버려서 로직이 깨짐

 

 

결과적으로 

즉, second = first;는 기존 1등을 2등 자리로 밀어주는 역할이고,
first = second;라면 그냥 1등을 날려버려서 잘못된 결과가 나온다고 생각하면 된다. 

 

else if에서는 기존 수가 들어오고 난 후, 제일 첫번째 큰수가 나온 뒤, 그 다음 나머지 수도 비교하여 두번째로 가장 큰 수를 num에 넣는 형식으로 진행한다.

 

 

Comments