문제
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()
'알고리즘' 카테고리의 다른 글
[Swift 알고리즘] 백준 10871 (외판원 순회2) (0) | 2023.04.07 |
---|---|
[Swift 알고리즘]백준 10819(차이를 최대로), 백준 16193(차이를 최대로 2) (그림있음) (0) | 2023.04.06 |
[Swift 알고리즘] 백준 10972(다음순열) (0) | 2023.04.04 |
[Swift 알고리즘] 백준 6603_로또 (0) | 2023.04.03 |
[Swift 알고리즘] 백준 2156_ 포도주 시식 (0) | 2023.04.02 |