[Codility] 6. MaxProductOfThree

Donghee Lee·2022년 4월 8일
0

Algorithm

목록 보기
15/17
post-thumbnail

[Codility] 6. MaxProductOfThree


문제 링크

MaxProductOfThree

문제 요약

A : N개의 정수로 구성 된 비어있지 않은 배열
삼중항 (P, Q, R) : A[P] A[Q] A[R] (0 ≤ P < Q < R < N).
삼중항의 최대 값을 리턴!

요구사항

N is an integer within the range [3..100,000]
each element of array A is an integer within the range [−1,000..1,000]

코드

우선 항이 3개이고 0,1,2의 경우를 고려해 마지막 수가 2이면 0으로 예외 처리한다.

음수가 1개, 2개일 때로 구분해서 풀었다.
음수가 1개라면 어떤 조합에도 끼지 못하므로 정렬한 뒤 가장 끝의 세 수를 곱했다.
음수가 2개라면 경우가 달라지는데,
음수 음수로 시작하면 세번째 값과 마지막 세 수의 값을 비교해야한다.

O(N*logN)

public func solution(_ A : inout [Int]) -> Int {
    var minusNum = Int()
    var plusNum = Int()
    var ans = Int()

    A.sort()
    if(A[A.count-1] == 2) { return 0 }

    if((A[0] < 0) && (A[1] > 0)) {
        ans = A[A.count-1] * A[A.count-2] * A[A.count-3]
    } else {
        minusNum = A[0] * A[1] * A[A.count-1]
        plusNum = A[A.count-1] * A[A.count-2] * A[A.count-3]
        ans = plusNum > minusNum ? plusNum : minusNum
    } 
    return ans
}
profile
Better than Yesterday

0개의 댓글