๋ฌธ์
ํ์ด ์ธ์ด
kotlin
์ฝ๋
import java.lang.Integer.max
import java.lang.Integer.min
import java.util.*
var n = 0
var max_value = Int.MIN_VALUE
var min_value = Int.MAX_VALUE
lateinit var array: Array<Int>
lateinit var operator: Array<Int>
fun main() = with(Scanner(System.`in`)) {
n = nextInt()
array = Array(n) { nextInt() }
operator = Array(4) { nextInt() }
calculate(array[0], 1)
println(max_value)
println(min_value)
}
fun calculate(sum: Int, index: Int) {
if (index == n) {
max_value = max(sum, max_value)
min_value = min(sum, min_value)
return
}
for (i in 0..3) {
if (operator[i] > 0) {
operator[i]-- // ์ฐ์ฐ์ ์ค์ด๊ณ
when (i) {
0 -> calculate(sum + array[index], index + 1)
1 -> calculate(sum - array[index], index + 1)
2 -> calculate(sum * array[index], index + 1)
3 -> calculate(sum / array[index], index + 1)
}
operator[i]++ // ์ฐ์ฐ์ ๋ค์ ๋๋ ค๋๊ณ
}
}
}
ํ์ด ๋ฐฉ๋ฒ
์ด๋ฒ ๋ฌธ์ ๋ ๋ฐฑํธ๋ํน
๋ณด๋ค๋ DFS
์ ๊ฐ๊น๋ค. ๋์ด ๊ฐ๋
์ ์ผ๋ก ๋งค์ฐ ์ ์ฌํ์ง๋ง ์ด๋ฒ ๋ฌธ์ ์ ๊ฒฝ์ฐ ๊ฐ์ง์น๊ธฐ
์์ด ๋ชจ๋ ๊ฒฝ์ฐ์ ๋ํด ํ์ํ๊ณ ์๊ธฐ์ DFS๋ผ๊ณ ํ๋จํ๋ค. (operator[i] > 0
์กฐ๊ฑด์ ๊ฐ์ง์น๊ธฐ๋ก ๋ณธ๋ค๋ฉด ๋ฐฑํธ๋ํน์ ํด๋นํ๋ค๊ณ ๋ ๋ณผ ์ ์๋ค.)
+, -, *, %
์ฐ์ฐ์ ๋ชจ๋ ์งํํ๋ฉด ๋๋ค. ์ค์ํ ์ ์ ์ฐ์ฐ์ ๊ฐ์๋ฅผ ๋ค์ ๋๋ ค๋์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
๊ฒฐ๊ณผ
'โ๏ธ ์ฝํ ์ค๋น > Back Tracking' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑํธ๋ํน / Kotlin] BOJ 1759 - ์ํธ ๋ง๋ค๊ธฐ (0) | 2022.04.10 |
---|---|
[๋ฐฑํธ๋ํน / Kotlin] BOJ 1987 - ์ํ๋ฒณ (0) | 2022.04.10 |
[๋ฐฑํธ๋ํน / Kotlin] BOJ 2580 - ์ค๋์ฟ (0) | 2022.03.30 |
[๋ฐฑํธ๋ํน / Kotlin] BOJ 9663 - N Queen (0) | 2022.03.29 |
[๋ฐฑํธ๋ํน / Kotlin] BOJ 15649 ~ 15652 - N๊ณผ M (1 ~ 4) (0) | 2022.03.28 |