-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathN_Queen.swift
41 lines (30 loc) · 1.03 KB
/
N_Queen.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import Foundation
func solution(_ n: Int) -> Int {
let board: [Int] = Array(repeating: -1, count: n) // 한 행에는 하나만 가능하니까 어디에 놓였는지 체크용
var answer: Int = 0
dfs(board: board, depth: 0, n: n, answer: &answer)
return answer
}
func dfs(board: [Int], depth: Int, n: Int, answer: inout Int) {
if depth == n {
answer += 1
return
}
for i in 0..<n {
if isValid(r: depth, c: i, board: board) {
var bboard = board // 사본
bboard[depth] = i // depth 행의 값은 i
dfs(board: bboard, depth: depth + 1, n: n, answer: &answer)
}
}
}
func isValid(r: Int, c: Int, board: [Int]) -> Bool {
for i in 0..<r {
if board[i] == c { // 같은 열에 이미 배치
return false
}
if abs(r - i) == abs(c - board[i]) { // 대각선 - 행의 차이, 열의 차이의 절댓값이 같으면
return false
}
}
return true