알고리즘(w.KOTLIN)/탐색
[백준][KOTLIN][10819] 차이를 최대로
금님은님아부지
2023. 2. 1. 14:36
728x90
https://www.acmicpc.net/problem/10819
10819번: 차이를 최대로
첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다.
www.acmicpc.net
문제 풀이
1. 주어진 배열 A 를 반복을 허락하지 않고 DFS 를 이용하여 나올 수 있는 배열의 경우를 구한다.
2. 1번에서 구해진 각 배열에서 "차이의 최대 값"을 구한다.
코드
import java.io.*
var answer10819 = Int.MIN_VALUE
fun main(args: Array<String>) {
val br = BufferedReader(InputStreamReader(System.`in`))
val N = br.readLine().toInt()
val number = br.readLine().split(" ").map { it.toInt() }.toIntArray()
val visit = BooleanArray(N) { false }
val result = IntArray(N) { 0 }
dfs(N, number, visit, result, 0)
println(answer10819)
}
fun dfs(n: Int, num: IntArray, visit: BooleanArray, ret: IntArray, depth: Int) {
if (depth == n) {
// 최대 값 구하기
answer10819 = Math.max(answer10819, getSum(n, ret))
return
}
for (i in 0 until n) {
if (!visit[i]) {
visit[i] = true
ret[depth] = num[i]
dfs(n, num, visit, ret, depth + 1)
visit[i] = false
}
}
}
fun getSum(n: Int, ret: IntArray): Int {
var result = 0
for (i in 0 until (n -1) ) {
result += Math.abs(ret[i] - ret[i + 1])
}
return result
}
728x90