문제
문제 풀이
max(0, 현재값-이전값)에서 최대의 효과를 발휘하려면 (현재값-이전값) > 0이고, 그것이 최대로 클 때 최대 효율을 발휘할 수 있다. 예를 들면 [1,2,3,4]가 있다면 [4,1], [3,2]을 짝지어야 최종합 4로 최댓값을 만들 수 있다. 만약 배열이 홀수일 경우 큰 수와 작은 수를 짝지은 후 남은 값을 맨 마지막에 추가해 주면 된다.
import Foundation
var n = Int(readLine()!)!
var skills = readLine()!.split(separator: " ").map{ Int(String($0))! }
func solution(_ n: Int, _ skills: [Int]) -> Int {
let skills = skills.sorted()
var answer = [Int]()
var maxSkill = 0
for i in 0..<n/2 {
answer.append(skills[n-i-1])
answer.append(skills[i])
}
if n % 2 == 1 {
answer.append(skills[n/2])
}
for i in 1..<answer.count {
maxSkill += max(0, answer[i] - answer[i-1])
}
maxSkill += answer[0]
return maxSkill
}
print(solution(n, skills))
'→ Problems' 카테고리의 다른 글
[Algorithm] 프로그래머스 - 배달 (Swift) (플로이드 워셜, DFS) (0) | 2024.03.28 |
---|---|
[Algorithm] 프로그래머스 - 하노이의 탑 (Swift) (1) | 2024.03.27 |
[Algorithm] 배낭 문제 Knapsack Problem (Swift) (0) | 2024.03.20 |
[Algorithm] 프로그래머스 - 합승 택시 요금 (Swift) (0) | 2024.03.20 |
[Algorithm] 프로그래머스 - 요격 시스템 (Swift) (0) | 2024.03.20 |