프로그래밍/일일코딩

[일일코딩][Java] 정수배열 중에서 3개를 뽑아 곱한 것의 최대값 반환하기

NYinJP 2023. 2. 7. 14:12

0️⃣ 문제

정수를 요소로 갖는 배열을 입력받아 3개의 요소를 곱해 나올 수 있는 최대값을 리턴합니다. 

 

1️⃣ 수도 코드

값 저장할 어레이 리스트 생성

반복문 i

  반복문 j

    반복문 k

      어레이리스트.add(arr[i]*arr[j]*arr[k]);

어레이 리스트에서 가장 큰 값 찾기

int max=어레이리스트.get(0) 

반복문 i

  만약 max값보다 더 큰 값이 있다면

    max값 갱신

return max;

 

2️⃣ 코드

public int largestProductOfThree(int[] arr) {
    // TODO:
    // 배열의 요소가 들어올 때 세개를 그 중 세개를 뽑아 곱했을 때 가장 큰 수 리턴하기
    // 값 저장할 변수
    ArrayList<Integer> result=new ArrayList<>();
    // 반복문 값들에 접근하면서
    for(int i=0;i<arr.length;i++){
        for(int j=i+1;j<arr.length;j++){
            for(int k=j+1;k<arr.length;k++){
                // 세개씩 곱한 값들 모두 result 어레이리스트에 add 하기
                result.add(arr[i]*arr[j]*arr[k]);
            }
        }
    }
    // 어레이 리스트에서 가장 큰 값 찾기
    int max=result.get(0);
    for(int i=0;i<result.size();i++){
        if(max<result.get(i)){
            max=result.get(i);
        }
    }
    // 결과 반환
    return max;
	}

 

3️⃣ 더 좋은 코드!

Arrays.sort(배열이름)

sort 메서드를 통해 int 타입은 물론 String 타입도 오름차순 정렬해준다

 

    //배열을 오름차순으로 정리합니다.
    Arrays.sort(arr);
    int arrLength = arr.length;
    //가장 큰 양수 3가지를 곱한 값
    int candidate1 = arr[arrLength - 1] * arr[arrLength - 2] * arr[arrLength - 3];
    //가장 작은 음수 2가지와, 가장 큰 양수를 곱한 값
    int candidate2 = arr[arrLength - 1] * arr[0] * arr[1];
    return Math.max(candidate1, candidate2);

배열을 정렬한 뒤에

가장 큰 수 세 개를 곱한 것과

가장 작은 음수 두 개와 가장 큰 양수 한 개를 곱한 것의 결과를 Math.max 메서드로 비교하였다.