diff --git a/SeongHoonC/README.md b/SeongHoonC/README.md index 4d2959be..e8dbcae8 100644 --- a/SeongHoonC/README.md +++ b/SeongHoonC/README.md @@ -24,5 +24,6 @@ | 20차시 | 2024.04.07 | DP | |https://github.com/AlgoLeadMe/AlgoLeadMe-6/pull/75 | | 21차시 | 2024.04.11 | DP | RGB거리 |https://github.com/AlgoLeadMe/AlgoLeadMe-6/pull/77 | | 22차시 | 2024.05.01 | DP | 가장 긴 증가하는 부분 수열 |https://github.com/AlgoLeadMe/AlgoLeadMe-6/pull/80 | -| 23차시 | 2024.05.14 | ??? | 소수의 연속합 |https://github.com/AlgoLeadMe/AlgoLeadMe-1/pull/186 | +| 23차시 | 2024.05.14 | 소수 | 소수의 연속합 |https://github.com/AlgoLeadMe/AlgoLeadMe-1/pull/186 | +| 24차시 | 2024.05.18| 백트래킹 | n-queen |https://github.com/AlgoLeadMe/AlgoLeadMe-1/pull/192 | --- diff --git a/SeongHoonC/dfs/nqeen.kt b/SeongHoonC/dfs/nqeen.kt new file mode 100644 index 00000000..aa11ddf5 --- /dev/null +++ b/SeongHoonC/dfs/nqeen.kt @@ -0,0 +1,41 @@ +import java.io.BufferedReader +import java.io.InputStreamReader + +var answer = 0 +var n: Int = 0 +lateinit var board: IntArray +fun main() { + val br = BufferedReader(InputStreamReader(System.`in`)) + n = br.readLine().toInt() + board = IntArray(n) + backTracking(0) + println(answer) +} + +private fun backTracking(row: Int) { + // row 가 증가하다가 n 이랑 같아지면 정답 +1 + if (row == n) { + answer++ + return + } + // row 일 때 각 열에 놓을 경우의 수 + for (col in 0 until n) { + board[row] = col + // 놓을 수 있다면 다음 행 + if (check(row)) backTracking(row + 1) + } +} + +private fun check(row: Int): Boolean { + for (i in 0 until row) { + // 행이 같거나 + if (board[row] == board[i]) { + return false + } + // 대각선 + if (row - i == kotlin.math.abs(board[row] - board[i])) { + return false + } + } + return true +}