요구능력 : 순열에 대한 이해
코드설명 :
문제풀이에도 단계가 있는 것 같다.
모든순열 <- 먼저 풀고 풀어야된다.
모든 순열을 구해서 문제에 있는 식을 추가해줬고, 이 식의 결과값들 중 최대값이 결국 정답이다.
아래는 식을 코드로 구현해준것이다.
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)
'Algorithm > 문제풀이_백준' 카테고리의 다른 글
[Swift][DFS][백트래킹] 백준 15655번 (N과 M (6)) (0) | 2021.09.30 |
---|---|
[Swift][DFS][백트래킹] 백준 15654번 (N과 M (5)) (0) | 2021.09.29 |
[Swift][DFS] 백준 15652번 (N과M(4)) (0) | 2021.09.27 |
[Swift][DFS] 백준 15651번 (N과 M (3)) (0) | 2021.09.27 |
[Swift][BFS] 백준 1697번 (숨바꼭질) (0) | 2021.09.27 |
댓글