본문 바로가기
Algorithm/문제풀이_백준

[Swift][BruteForce] 백준 10819번 (차이를 최대로)

by Joahnee 2021. 9. 28.

요구능력 : 순열에 대한 이해

 

코드설명 : 

 

문제풀이에도 단계가 있는 것 같다.

모든순열 <- 먼저 풀고 풀어야된다.

모든 순열을 구해서 문제에 있는 식을 추가해줬고, 이 식의 결과값들 중 최대값이 결국 정답이다.

아래는 식을 코드로 구현해준것이다.

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)

댓글