본문 바로가기
알고리즘

[Swift 알고리즘]백준 10819(차이를 최대로) 브루스트포스

by 마라민초닭발로제 2023. 4. 5.

문제

N개의 정수로 이루어진 배열 A가 주어진다. 이때, 배열에 들어있는 정수의 순서를 적절히 바꿔서 다음 식의 최댓값을 구하는 프로그램을 작성하시오.

|A[0] - A[1]| + |A[1] - A[2]| + ... + |A[N-2] - A[N-1]|

입력

첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다.

출력

첫째 줄에 배열에 들어있는 수의 순서를 적절히 바꿔서 얻을 수 있는 식의 최댓값을 출력한다.

 

해결 방법

그냥 순열 만들어서(브루스트포스) 최댓값 비교하는 코드 별로 어렵지 않을 듯?

func solaCee2() {
    let inputN = Int(readLine()!)!
    let inputArr = readLine()!.split(separator: " ").map{Int($0)!}
    var sum = 0
    
    func getSumValue(_ arr:[Int]) -> Int {
        var sum = 0
        for i in 1..<arr.count {
            sum += abs(arr[i] - arr[i - 1])
        }
        return sum
    }
    func funcrecur(_ arr:[Int], _ prefix:[Int] = []) {
        if arr.isEmpty {
            let tempSum = getSumValue(prefix)
            sum = max(sum, tempSum)
            return
        }
        for i in 0..<arr.count {
            var tempArr = arr
            let node = tempArr.remove(at: i)
            funcrecur(tempArr, prefix + [node])
        }
    }
    funcrecur(inputArr)
    print(sum)
}
solaCee2()