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
'알고리즘(w.KOTLIN) > 탐색' 카테고리의 다른 글
[백준][KOTLIN][1759] 암호 만들기 (0) | 2023.02.02 |
---|---|
[백준][KOTLIN][10971]외판원 순회2 (0) | 2023.02.01 |
[백준][KOTIN][10972] 다음 순열 (0) | 2023.01.26 |
[백준][1748][KOTLIN] 수 이어 쓰기1 (0) | 2023.01.19 |
[백준][9095][KOTLIN] 1, 2, 3 더하기 (0) | 2023.01.19 |