๐๐ป ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/2667
๐ป ๋ฌธ์ ํ์ด
์ด๋ฐ ๋ฌธ์ ๋ฅผ ๋ง๋๋ฉด, ํ์ฌ์์น์์ ์, ์๋, ์ค๋ฅธ์ชฝ, ์ผ์ชฝ์ ์ดํด๋ณด๋ฉด์ ์ฐ๊ฒฐ์ด ๋์ด์๋? ๋ฅผ ํ๋จํด์ผํ๋ค.
์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด, ํ์ฌ ์์น๋ (0,0)์ผ๋ ๋ฐฉํฅํค๋ก ์์ง์ผ ์ ์๋ค. x์ขํ์ธ 0์๋ค๊ฐ dx[2]์ ๋ํ๊ณ , y์๋ค๊ฐ dy[2]์ ๋ํด์ฃผ๋ฉด, (1,0)์ผ๋ก ํ์นธ ์๋๋ก ์ด๋ํ ๊ฒ์ด๋ค. ์ด์ฒ๋ผ ์ด๋ ๊ฒ "์ฐ๊ฒฐ๋ 1์ ์ฐพ์ ๋ฌด์ธ๊ฐ๋ฅผ ์ฐพ๋๋ฌธ์ "๋ผ๋ฉด, ์ด๋ ๊ฒ ๋ฐฉํฅํค๋ฅผ ์๊ฐํด์ ๋ฌธ์ ๋ฅผ ํ๋ฉด ๋๋ค.
์ง๊ธ ๋ฌธ์ ๋ 1์ด ์ฐ๊ฒฐ๋์ด์๋ ๋ถ๋ถ์ '์์น 'ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๋ฌธ์ ์์ ์ฃผ์ด์ง๋๋ก, 1์ด ์ฐ๊ฒฐ๋์ด์์ผ๋ฉด ํ๋์ ๋จ์ง๊ฐ ๋๋ ๊ฒ์ด๋ค.
๋๋ dfs๋ฅผ ์ด์ฉํด์ 1์ธ ๊ณณ์ ์ ๋ถ ๋ฐฉ๋ฌธํ๊ณ , ๋ฐฉ๋ฌธํ๋ค๋ฉด 0์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ๋ฐฉ์์ ์ ํํ๋ค.
๐ป ์์ค์ฝ๋
let n = Int(String(readLine()!))!
var graph = [[Int]]()
var cntList = [Int]()
var cnt = 0
let dx = [-1, 1, 0, 0] //์ ์ ์ผ ์ค
let dy = [0, 0, -1, 1]
for _ in 0..<n {
graph.append(Array(readLine()!.map{ Int(String($0))! }))
}
func dfs(_ i: Int, _ j: Int) -> Int {
var deque = [(Int, Int)]()
deque.append((i, j))
graph[i][j] = 0 // ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
cnt = 1
while !deque.isEmpty {
let tem = deque.removeFirst()
let x = tem.0
let y = tem.1
for k in 0..<4 {
let nx = x + dx[k]
let ny = y + dy[k]
if nx < 0 || ny < 0 || nx >= n || ny >= n {
continue
}
if graph[nx][ny] == 1 {
graph[nx][ny] = 0
deque.append((nx, ny))
cnt += 1
}
}
}
return cnt
}
for i in 0..<n {
for j in 0..<n {
if graph[i][j] == 1 {
cntList.append(dfs(i,j))
}
}
}
print(cntList.count)
cntList.sort()
for i in cntList {
print(i)
}
'Algorithm > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] (Swift) 2178๋ฒ - ๋ฏธ๋กํ์ (BFS ํ์ด) (0) | 2022.06.23 |
---|---|
[๋ฐฑ์ค] (Swift) 4963๋ฒ - ์ฌ์ ๊ฐ์ (DFS ํ์ด) (0) | 2022.06.01 |
[๋ฐฑ์ค] (Swift) 1707๋ฒ - ์ด๋ถ๊ทธ๋ํ (DFS๋ก ํ๊ธฐ!) (0) | 2022.05.25 |
[๋ฐฑ์ค] (Swift) 14889๋ฒ - ์คํํธ์ ๋งํฌ (DFS-๋ฐฑํธ๋ํน) (0) | 2022.05.23 |
[๋ฐฑ์ค] (Swift) 11724๋ฒ - ์ฐ๊ฒฐ ์์์ ๊ฐ์ (DFS ์ฐ์ต) (0) | 2022.05.20 |