[코딩테스트연습] 코딩테스트 입문 > Lv.0 최댓값 만들기(1)

2024. 3. 16. 11:42코딩 테스트/[프로그래머스] Java

문제 설명


문제 풀이

두 개를 곱해서 최댓값을 만든다는 말은, 0이 아닌 두 최댓값을 곱하면 된다고 생각했다.

따라서 배열 중 1,2번째로 큰 값을 구해서 곱해주는 방법으로 작성하였다.

 

[try1]

import java.util.*;
import java.util.stream.*;

class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        int max=0;
        // 1번째로 큰 값 찾기
        for(int i=0; i<numbers.length; i++){
            if(numbers[i]>max) max=numbers[i];
        }
        answer += max;
        List<Integer> list = Arrays.stream(numbers).boxed().collect(Collectors.toList());
        numbers[list.indexOf(max)]=0;
        // 2번째로 큰 값 찾기
        max=0;
        for(int i=0; i<numbers.length; i++){
            if(numbers[i]>max) max=numbers[i];
        }
        answer *= max;

        return answer;
    }
}

 

1번째로 큰 값을 찾고난 후, 2번째로 큰 값을 찾기 위해서 어떻게 해야 하는지 고민했다.

1번째로 큰 값을 삭제한 후, 다시 최댓값을 찾는 과정을 거쳐야하나? 라고 생각했다.

하지만 그러기 위해서는 삭제될 큰 값의 인덱스로 접근해서 0으로 만들거나 아예 배열에서 삭제해야 했다.

위 원리를 이용해서 코드를 작성해보았는데... 굉장히 복잡해 보이는 것이다!

다른 방법이 있나 더 고민해보았다..가 방법이 떠올랐다!

배열을 정렬해서 두 개의 원소만 가져오면 되는 것이었다!!!!!!!!

 

[try2]

import java.util.*;

class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        Arrays.sort(numbers); //오름차순 정렬
        answer = numbers[numbers.length-1] * numbers[numbers.length-2];
        return answer;
    }
}

훨씬 간단하고 이해하기 좋은 코드로 작성했다!!


다른 사람의 풀이 보기

1. stream을 사용해서 내림차순 정렬 후, 곱셈 진행하기

2. prev라는 변수를 지정하여, 비교하면서 곱셉 진행하기