โซ๏ธ ๋ฌธ์
https://www.acmicpc.net/problem/4963
4963๋ฒ: ์ฌ์ ๊ฐ์
์ ๋ ฅ์ ์ฌ๋ฌ ๊ฐ์ ํ ์คํธ ์ผ์ด์ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค์ ์ฒซ์งธ ์ค์๋ ์ง๋์ ๋๋น w์ ๋์ด h๊ฐ ์ฃผ์ด์ง๋ค. w์ h๋ 50๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ ์ ์์ด๋ค. ๋์งธ ์ค๋ถํฐ h๊ฐ ์ค์๋ ์ง๋
www.acmicpc.net
โซ๏ธ ๋์ ํ์ด
์๋ ์ด๊ฒ์,,, ๋ด๊ฐ ์ด ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ ์ ๋ฐ๋ก ์ ๋ฆฌํ๋ '์๋ฃ์ ์ผ๋ ค๋จน๊ธฐ' ์์ ์ ๊ฐ์ ๋ฌธ์ ๋ค.
https://github.com/HotCodeBreakers/CodingTest/discussions/25
[๊ฐ๋ ์ ๋ฆฌ] DFS+BFS (ํน์,,, ๋ฌธ์ ํ์ด ์ ์ ์ด์ฝํ ์ฑ ์ ๋ณด์๋์!?) · Discussion #25 · HotCodeBreakers/Codi
์๋ ํ์ธ์ ํซ์ฝ๋๋ถ๋ค, ์ง๋ฌธ์ด ํ๋ ์๋๋ฐ์! ๋ชจ๋ ๋ฌธ์ ํ๊ธฐ ์ ์ ์ด์ฝํ ์ฑ ์ ์๋ ์์ ๋ฅผ ๋ณด์๋์? ์ ๋ ๊ทธ๋ฅ ๋ฌดํฑ๋๊ณ ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์์ํ๋๋ฐ์ ใ ใ ใ ใ ใ ใ ์ด๋ฒ์ ์ฌ๋ผ์จ ๋ฌธ์ ๋ฅผ ๋ณด๋
github.com
์ฌ๊ธฐ ๋งํฌ ๋ค์ด๊ฐ๋ฉด, ๋งจ ์๋ ๋ถ๋ถ์ ์๋ [์ด์ฝํ ์์ - 1๏ธโฃ๋ฒ] ๊ณผ ๋์ผํ๋ค๋ ๊ฒ! ๊ทธ๋์ ํ์ด๊ณผ์ ์ ์๊ฐํ์ง ์๊ณ ๋ฐ๋ก ์จ๋ด๋ ค๊ฐ๋ค.
- ์ฐ๊ฒฐ๋ ๋ถ๋ถ์ด ๋ช๊ฐ์ธ์ง ์ธ์ด์ฃผ๋ ๊ฒ์ด๊ณ , ์ํ์ข์ฐ ๋ฟ๋ง ์๋๋ผ ์ค๋ฅธ์ชฝ์์๋์ ์ผ์ชฝ์์๋๋ ๋ฐฉ๋ฌธํด์ฃผ์ด์ผํ๊ธฐ ๋๋ฌธ์ ๋ฐฉํฅํค๋ฅผ 8๊ฐ๋ก ์ถ๊ฐํ๋ค.
- ๋ชจ๋ ์นธ์ ํ์ํด์ผํ๊ธฐ ๋๋ฌธ์ ์ด์ค for๋ฌธ์ ์ด์ฉํด์ ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ค๋ฌ์ค ๊ฒ์ด๋ค.
- DFS๋ ์ผ๋จ, 1์ด๊ธฐ๋ง ํ๋ฉด ์ฌ์ด ์กด์ฌํ๋ ๊ฒ์ด ๋๋ฏ๋ก, if๋ฌธ์ ๋ค์ด๊ฐ๊ธฐ๋ง ํ๋ฉด true๋ฅผ ์ถ๋ ฅํ๋๋ก ํด์ result์ ๊ฐ์ ๋ํด์ค ์ ์๊ฒ ๊ตฌ์ฑํ๋ฉด ๋๋ค.
- DFS ๋ด๋ถ์์๋ for๋ฌธ์ ์ฌ์ฉํด์ 8๊ฐ์ ๋ฐฉํฅ ๋ชจ๋ ์ดํด๋ด์ค๋ค, ์ธ์ ํ ๋ถ๋ถ๋ค๋ dfs ํจ์์ ๋ฃ์ด์ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค~ ๊ทธ๋ผ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋ถ๋ถ์ด ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๊ฐ ๋๋ฉด์ ํ๋์ ์ฌ์ผ๋ก ์ฐ๊ฒฐ๋๋ ๊ฒ
โซ๏ธ ์ ๋ต์ฝ๋
import Foundation
// ์ํ์ข์ฐ ์ผ์ชฝ์ ์ผ์ชฝ์๋ ์ค๋ฅธ์ชฝ์ ์ค๋ฅธ์ชฝ์๋
let dx = [-1, 1, 0, 0, -1, 1, -1, 1]
let dy = [0, 0, -1, 1, -1, -1, 1, 1]
while true {
let wh = readLine()!.split(separator: " ").map{ Int($0)! }
if wh == [0, 0] {
break
}
var islandMap = [[Int]]()
for _ in 0..<wh[1] {
islandMap.append(readLine()!.split(separator: " ").map{ Int($0)! })
}
// MARK: - DFS ํจ์
func dfs(x: Int, y: Int) -> Bool {
if x < 0 || x >= wh[1] || y < 0 || y >= wh[0] {
return false
}
if islandMap[x][y] == 1 {
islandMap[x][y] = 0
for i in 0..<8 {
let nx = x + dx[i]
let ny = y + dy[i]
dfs(x: nx, y: ny)
}
return true
}
return false
}
// MARK: - main
var result = 0
for i in 0..<wh[1] {
for j in 0..<wh[0] {
if dfs(x: i, y: j) {
result += 1
}
}
}
print(result)
}
'Algorithm > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] (Swift) 3184๋ฒ - ์ (์ค๋ฒ1) (DFS) (1) | 2023.02.28 |
---|---|
[๋ฐฑ์ค] (Swift) 1743๋ฒ - ์์๋ฌผ ํผํ๊ธฐ (DFS) (4) | 2023.02.27 |
[๋ฐฑ์ค] (Swift) 2210๋ฒ - ์ซ์ํ ์ ํ (DFS, ์ฌ๊ท) (0) | 2023.02.22 |
[๋ฐฑ์ค] (Swift) 20546๋ฒ - ๊ธฐ์ ์ ๋งค๋ฏธ๋ฒ (๊ตฌํ) (0) | 2023.02.15 |
[๋ฐฑ์ค] (Swift) 20291๋ฒ - ํ์ผ ์ ๋ฆฌ (๊ตฌํ) (0) | 2023.02.15 |