์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- concurrency
- ์ด์งํ์
- APPJAM
- BFS
- discardableResult
- SwiftUI
- algorithm
- IOS
- URLSession
- algoritm
- Til
- ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ
- ๊ณ ๋์ kit
- SwiftUI ํํ ๋ฆฌ์ผ
- ์ฐ์ํ์ค๋ถ๋ถ์์ด์ํฉ
- SOPT
- GCD
- DynamicProgramming
- Swift
- dfs
- binarySearch
- HAVIT
- duno
- SwiftUI Tutorials
- 0์ด๋์ด์๋๊ธธ
- ํ๋ก๊ทธ๋๋จธ์ค
- ๋์ ๊ณํ๋ฒ
- SQL
- GroupBy
- ๊ธฐ์ด๋ฌธ๋ฒ
- Today
- Total
suvera-dev ๐ฅฆ
Backtracking ๋ฐฑํธ๋ํน ๋ํ ๋ฌธ์ ) NQueen - Swift๋ก ๊ตฌํ ๋ณธ๋ฌธ
Backtracking ๋ฐฑํธ๋ํน ๋ํ ๋ฌธ์ ) NQueen - Swift๋ก ๊ตฌํ
suvera 2023. 3. 30. 20:43NQueen ๋ฌธ์ ๋ฅผ ํธ๋๋ฐ Swift ํ์ด๊ฐ ๋ง์ด ์์ด์ ์ฌ๋ ค๋ด ๋๋ค.
Backtracking ์ด๋?
๐ฅ ํด๋ฅผ ์ฐพ๋ ๋์ค ํด๊ฐ ์๋์ด์ ๋งํ๋ฉด, ๋๋์๊ฐ์ ๋ค์ ํด๋ฅผ ์ฐพ์๊ฐ๋ ๊ธฐ๋ฒ์ ๋งํฉ๋๋ค.
โ ์ฆ, DFS๋ฅผ ์ฌ์ฉํ์ฌ ๋ง์ฝ ์กฐ๊ฑด์ ๋ง์ง ์์ผ๋ฉด ๊ทธ ์ฆ์ ์ค๋จํ๊ณ ์ด์ ์ผ๋ก ๋์๊ฐ ๋ค์ ํ์ธํ๋ ๊ฒ์ ๋ฐ๋ณตํ๋ฉด์ ์ํ๋ ์กฐ๊ฑด์ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ ์
๋๋ค.
์ ๋ฆฌํ์๋ฉด, ๋ฐฑํธ๋ํน์ ๋ชจ๋ ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์ ์ค์์ ํน์ ํ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ๋ง ์ดํด๋ณด๋ ๊ฒ
๐ฅ ์ฃผ๋ก ๋ฌธ์ ํ์ด์์๋ DFS ๋ฑ์ผ๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํ๋ ๊ณผ์ ์์, ์กฐ๊ฑด๋ฌธ ๋ฑ์ ๊ฑธ์ด ๋ต์ด ์ ๋๋ก ๋ ์ ์๋ ์ํฉ์ ์ ์ํ๊ณ , ๊ทธ๋ฌํ ์ํฉ์ผ ๊ฒฝ์ฐ์๋ ํ์์ ์ค์ง์ํจ ๋ค ๊ทธ ์ด์ ์ผ๋ก ๋์๊ฐ์ ๋ค์ ๋ค๋ฅธ ๊ฒฝ์ฐ๋ฅผ ํ์ํ๊ฒ๋ ๊ตฌํํ ์ ์์ต๋๋ค.
N-Queen ๋ฌธ์
NxN ํฌ๊ธฐ์ ์ฒด์คํ์ N๊ฐ์ ํธ์ ์๋ก ๊ณต๊ฒฉํ ์ ์๋๋ก ๋ฐฐ์นํ๋ ๋ฌธ์
- N-Queen ๋ฌธ์ ๋ N์ ํฌ๊ธฐ๊ฐ ์๋ค๋ฉด DFS ๋ฐฉ์์ผ๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํ๋ฉด ๋ต์ ์ฐพ์ ์ ์๋ค. ํ์ง๋ง N์ ํฌ๊ธฐ๊ฐ ์ปค์ง ์๋ก ํ์ํด์ผํ ๊ฒฝ์ฐ์ ์๊ฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ๊ฒ ๋ฉ๋๋ค.
N-Queen ๋ฌธ์ ์ ํ์ด ์์ด๋์ด๋ ์๋ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์ด์ ! ์์ ์ค๋ช ๊ตฟ. !! ์ด๊ฒ๋ณด๋ค ์ ํ ์์ ์ด ์์ด์ ๋๊น๋๋ค. ใ ใ
์ ๋ ์์ ๊ธ๋ก ์ด๋ก ์ ์ดํดํ ๋ค์์ ๋ค๋ฅธ ์ธ์ด ํ์ด๋ฅผ ์ฐธ๊ณ ํ์ต๋๋ค !
๊ฐ์ฅ ์ดํด๊ฐ ์๋๋ ํ์ด๋ฅผ ๊ณจ๋ผ์ Swift๋ก ๊ตฌํํด์คฌ์ต๋๋ค !!
์ ๋ธ๋ก๊ทธ์ ํ์ด๋ฅผ ์ฐธ๊ณ ํด์ ํ๋ก๊ทธ๋๋จธ์ค์ N-Queen ๋ฌธ์ ๋ฅผ Swift๋ก ํ์์ต๋๋น.
func solution(_ n:Int) -> Int {
var chess = Array(repeating: -1, count: n)
var answer = 0
// ์ ๋ง์ฑ ๊ฒ์ฌ
func checkArrangeQueen(row: Int) -> Bool {
for i in 0..<row {
if chess[i] == chess[row] || abs(chess[row] - chess[i]) == abs(row - i) {
// ๊ฐ์ ์ด์ด๊ฑฐ๋ ๋๊ฐ์ ์ผ ๊ฒฝ์ฐ
return false
}
}
return true
}
// ํ์ ๊ธฐ์ค์ผ๋ก DFS. 1ํ -> 2ํ -> 3ํ ...
func dfs(row: Int) {
// ๋ง์ฝ์ ๋๊น์ง ๋ค ๋ฐฐ์นํ์ ๊ฒฝ์ฐ. +1
if row == n {
answer += 1
return
}
// ํ๋์ ํ์์ ๋ชจ๋ ์ด์ ์ ๋ง์ฑ์ ๊ฒ์ฌํ๋ค.
for i in 0..<n {
chess[row] = i // ๊ทธ ์๋ฆฌ์ ์ผ๋จ ๋ฐฐ์น
if checkArrangeQueen(row: row) {
// ๋ฐฐ์นํ ์ ์๋ค๋ฉด,
dfs(row: row + 1) // ๋ค์ ํ DFS
}
// ๋ฐฐ์นํ ์ ์๋ค๋ฉด ๋ค์ index๋ก ๋์ด๊ฐ.
}
}
dfs(row: 0)
return answer
}
https://school.programmers.co.kr/learn/courses/30/lessons/12952
'Algorithm > CodingTest- Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค Lv3] ์ฐ์ ํ์ค ๋ถ๋ถ ์์ด์ ํฉ - Swift (3) | 2023.05.22 |
---|