벌 두 마리와 꿀통이 놓일 수 있는 경우의 수는 총 세 가지다. 꿀통을 향해 날아갈 때까지 꿀을 모을 수 있기 때문에 특정 경우 "가장 많이 모을 수 있는" 수는 정해져 있다. 이때 관건은 "겹치는" 자리가 어디인지 확인하는 것이다. 누적 합을 미리 구해놓은 뒤, 다른 한 마리의 위치가 어디 있는지 체크하면서 최댓값을 구하자.
import Foundation
let N = Int(String(readLine()!))!
let honeys = Array(readLine()!.split(separator: " ").map{Int(String($0))!})
var toRight = honeys
var toLeft = honeys
for i in 1..<N {
toRight[i] += toRight[i-1]
toLeft[N-i-1] += toLeft[N-i]
}
var answer = 0
// 1. 벌 - 벌 - 꿀통
let leftMostBee = toRight[N-1] - honeys[0]
for i in 1..<N-1 {
let rightBee = toRight[N-1] - toRight[i]
answer = max(answer, leftMostBee - honeys[i] + rightBee)
}
// 2. 벌 - 꿀통 - 벌
for i in 1..<N-1 {
let leftMostBee = toRight[i] - honeys[0]
let rightMostBee = toRight[N-1] - toRight[i-1] - honeys[N-1]
answer = max(answer, leftMostBee + rightMostBee)
}
// 3. 꿀통 - 벌 - 벌
let rightMostBee = toRight[N-1] - honeys[N-1]
for i in 1..<N-1 {
let leftMostBee = toRight[i-1]
answer = max(answer, leftMostBee + rightMostBee - honeys[i])
}
print(answer)