728x90
https://www.acmicpc.net/problem/15658
15658번: 연산자 끼워넣기 (2)
첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1보다 크거나 같고, 4N보다 작거나 같은 4개의 정수가 주어지는데, 차례대
www.acmicpc.net
문제 풀이
1. 주어진 입력을 number 배열과 operator 배열에 저장한다.
2. operator 배열의 정보를 완전 탐색하는 DFS 를 수행한다.
3. 연산 결과를 구하는 것이기 때문에 DFS 수행 시 첫번째 num 값을 채워서 수행한다.
코드
import java.io.*
private var max = Int.MIN_VALUE
private var min = Int.MAX_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 operator = br.readLine().split(" ").map { it.toInt() }.toIntArray()
dfs(N, number, operator, 1, number[0])
println(max)
println(min)
}
private fun dfs(N: Int, number: IntArray, operator: IntArray, depth: Int, sum: Int) {
if (depth == N) {
min = Math.min(min, sum)
max = Math.max(max, sum)
return
}
for (i in 0..3) {
if (operator[i] > 0) {
operator[i] -= 1
//println("operator[$i]:${operator[i]}, sum:$sum")
when (i) {
0 -> dfs(N, number, operator, depth + 1, sum + number[depth])
1 -> dfs(N, number, operator, depth + 1, sum - number[depth])
2 -> dfs(N, number, operator, depth + 1, sum * number[depth])
3 -> dfs(N, number, operator, depth + 1, sum / number[depth])
}
operator[i] += 1
}
}
}
728x90
'알고리즘(w.KOTLIN) > 탐색' 카테고리의 다른 글
[백준][코틀린][1987] 알파벳 (0) | 2023.03.09 |
---|---|
[백준][코틀린][9663] N-Queen (0) | 2023.03.07 |
[백준][코틀린][1339] 단어 수학 (0) | 2023.03.01 |
[백준][KOTLIN][14391] 종이 조각 (0) | 2023.02.08 |
[백준][KOTLIN][2529] 부등호 (0) | 2023.02.06 |