Algorithm/문제풀이_백준
[Swift][BruteForce] 백준 10819번 (차이를 최대로)
Joahnee
2021. 9. 28. 14:15
요구능력 : 순열에 대한 이해
코드설명 :
문제풀이에도 단계가 있는 것 같다.
모든순열 <- 먼저 풀고 풀어야된다.
모든 순열을 구해서 문제에 있는 식을 추가해줬고, 이 식의 결과값들 중 최대값이 결국 정답이다.
아래는 식을 코드로 구현해준것이다.
for i in 0..<arr.count {
if i + 1 < arr.count {
nowSum += abs(arr[i] - arr[i + 1])
}
}
resultSum = max(resultSum, nowSum)
후기 : 문제를 보고 배열의 수의순서를 적절히 바꾸라길래 순열 같았고, 적절히 바꿔서 얻을 수 있는 최대값이면 그냥 모든 경우의수를 비교해서 최대값을 구해야겠다고 생각하고 풀었다.
import Foundation
let n = Int(String(readLine()!))!
var arr = readLine()!.split(separator: " ").map{Int(String($0))!}
arr.sort()
var sum = 1
func factorial(_ n: Int){
if n == 0 {
return
}
sum *= n
factorial(n - 1)
}
factorial(n)
var resultSum = 0
for _ in 0..<sum {
var nowSum = 0
for i in 0..<arr.count {
if i + 1 < arr.count {
nowSum += abs(arr[i] - arr[i + 1])
}
}
resultSum = max(resultSum, nowSum)
var index = 0
for i in 0..<n{
if i + 1 < n, arr[i] < arr[i + 1]{
index = i
}
}
var biggerIndex = 0
for j in 0..<n {
if arr[index] < arr[j] {
biggerIndex = j
}
}
arr.swapAt(index, biggerIndex)
arr = arr[0...index] + arr[(index + 1)..<arr.count].sorted()
}
print(resultSum)