반응형
안녕하세요. 개발 중인 정주입니다.
오늘은 "Codility - MaxProductOfThree" 문제를 풀었습니다.
Github
문제 링크
풀이
이번 문제는 배열에서 랜덤한 세 개의 수를 곱했을 때의 최댓값을 구하는 문제입니다.
평균값을 구하는 문제처럼 어떤 수학적 원리가 있나? 했지만
정렬을 이용한 곱 문제였습니다.
큰 수끼리 곱하면 곱이 커진다는 원리를 이용해 풀었습니다.
이번 문제는 음수도 input 범위에 속하기 때문에 함께 고려해줘야 합니다.
배열은 sorted( )를 이용하면 O(N log N)으로 정렬할 수 있습니다.
그 다음 양수곱 중 최대값인 맨 뒤 세 개의 곱을 구합니다.
맨 앞 두 개 원소의 곱이 양수라면 맨 뒤 원소를 곱해주고 최대값을 return 합니다.
맨 앞 두 개 원소의 곱이 음수라면 맨 뒤 세 개의 곱을 return 합니다.
코드를 보시면 더 심플하게 이해가 되실겁니다.
감사합니다!
전체 코드
더보기
import Foundation
import Glibc
// you can write to stdout for debugging purposes, e.g.
// print("this is a debug message")
public func solution(_ A : inout [Int]) -> Int {
// write your code in Swift 4.2.1 (Linux)
//non-empty array
//swift sort = O(N log N)
let sortedA = A.sorted()
let countA = A.count
let backProduct = sortedA[countA-1] * sortedA[countA-2] * sortedA[countA-3]
var frontProduct = sortedA[0] * sortedA[1]
if frontProduct < 0 {
return backProduct
} else {
frontProduct *= sortedA[countA-1]
return max(frontProduct, backProduct)
}
}
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.
반응형