[백준 21768] 꿀 따기

Junyoung Park·2022년 7월 16일
0

코딩테스트

목록 보기
503/631
post-thumbnail

1. 문제 설명

꿀 따기

2. 문제 분석

벌 두 마리와 꿀통이 놓일 수 있는 경우의 수는 총 세 가지다. 꿀통을 향해 날아갈 때까지 꿀을 모을 수 있기 때문에 특정 경우 "가장 많이 모을 수 있는" 수는 정해져 있다. 이때 관건은 "겹치는" 자리가 어디인지 확인하는 것이다. 누적 합을 미리 구해놓은 뒤, 다른 한 마리의 위치가 어디 있는지 체크하면서 최댓값을 구하자.

3. 나의 풀이

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)
profile
JUST DO IT

0개의 댓글