반응형
int arrASize = A.length;
        int maxResult =0;
        int tempResult;

        for (int i = 0; i < arrASize - 2; i++) {
            for (int j = i + 1; j < arrASize - 1; j++) {
                for (int l = j + 1; l < arrASize; l++) {
                    tempResult = A[i] * A[j] * A[l];
                    if(i==0 && j==1 && l==2) {
                        maxResult = tempResult;
                    }

                    else if(maxResult < tempResult) {
                        maxResult = tempResult;
                    }
                }
            }

        }

        System.out.println(maxResult);
        return maxResult;

    }

위의 코드로 할 시 결과 값은 올바른 값이 나오지만... 효율이 정말 꽝인 코드이다.... 한마디로 시간 복잡도가 n의 3제곱 이 된다.

 

100%인 다른 분의 코드를 보니.........

배열의 sort 메소드를 이용하여 정렬을 한 뒤 맨 앞 3개의 값과 맨 뒤의 3개의 값을 비교하였다. 

곱셈의 성질 상 3개의 곱셈이 숫자가 크다고 언제나 높은 값이 아닌 음수, 양수 또한 따져야 하기 때문이다.....

 

배열의 순서는 상관이 없다.... 그 안에 값을 가지고 로직을 구현 하면 되는 것이었다.

소팅을 이용하면 단 2번의 곱셈으로로 최대 값을 알수 있는데.... 그걸 for 문으로 돌고 있었으니.... 효율이 꽝일 수 밖에.....

반응형

+ Recent posts