반응형
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 문으로 돌고 있었으니.... 효율이 꽝일 수 밖에.....
반응형
'IT > 코딜리티(codility)' 카테고리의 다른 글
[코딜리티(codility)] Counting Elements - PermCheck (0) | 2019.05.25 |
---|---|
[코딜리티(codility)] Stacks and Queues - Nesting (0) | 2019.05.24 |
[코딜리티(codility)] CyclicRotation (0) | 2019.05.23 |
[codility] 1. BinaryGap (0) | 2019.05.22 |