ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ฉ๐ป๐ป ๋ฌธ์
4963๋ฒ: ์ฌ์ ๊ฐ์
์ ๋ ฅ์ ์ฌ๋ฌ ๊ฐ์ ํ ์คํธ ์ผ์ด์ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค์ ์ฒซ์งธ ์ค์๋ ์ง๋์ ๋๋น w์ ๋์ด h๊ฐ ์ฃผ์ด์ง๋ค. w์ h๋ 50๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ ์ ์์ด๋ค. ๋์งธ ์ค๋ถํฐ h๊ฐ ์ค์๋ ์ง๋
www.acmicpc.net
โ๐ป ํ์ด
๐จ Go
// https://www.acmicpc.net/problem/4963
package main
import (
"bufio"
"fmt"
"os"
)
var (
graph [][]int
visited [][]bool
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
for {
var w, h int
fmt.Fscanln(reader, &w, &h)
if w == 0 && h == 0 {
break
}
graph = make([][]int, h)
for i := 0; i < h; i++ {
graph[i] = make([]int, w)
}
visited = make([][]bool, h)
for i := 0; i < h; i++ {
visited[i] = make([]bool, w)
}
for i := 0; i < h; i++ {
for j := 0; j < w; j++ {
fmt.Fscanf(reader, "%d ", &graph[i][j])
}
}
var numOfIslands int
for i := 0; i < h; i++ {
for j := 0; j < w; j++ {
if !visited[i][j] && graph[i][j] == 1 { // ์ฌ์ด๋ฉด์ ๋ฐฉ๋ฌธํ์ง ์์ ๊ฒฝ์ฐ
numOfIslands++
dfs(i, j)
}
}
}
fmt.Fprintln(writer, numOfIslands)
}
}
func dfs(h, w int) {
visited[h][w] = true
var startH, startW, endH, endW = h, w, h, w
if h-1 >= 0 {
startH--
}
if h+1 < len(graph) {
endH++
}
if w-1 >= 0 {
startW--
}
if w+1 < len(graph[h]) {
endW++
}
// ์, ํ, ์ข, ์ฐ, ๋๊ฐ์ ํ์
for i := startH; i <= endH; i++ {
for j := startW; j <= endW; j++ {
if graph[i][j] == 1 && !visited[i][j] { // ์ฌ์ด๋ฉด์ ๋ฐฉ๋ฌธํ์ง ์์ ๊ฒฝ์ฐ ์ฌ๊ท
dfs(i, j)
}
}
}
}
๐จ Python3
# https://www.acmicpc.net/problem/4963
import sys
sys.setrecursionlimit(2500) # python ์ฌ๊ทํจ์ ํธ์ถ ํ์๋ 1000ํ์ด๋ฏ๋ก ์ค์ ๋ณ๊ฒฝ
graph = []
visited = []
def dfs(h, w):
global visited
global graph
visited[h][w] = True
start_h, start_w, end_h, end_w = h, w, h, w
if h-1 >= 0:
start_h -= 1
if h+1 < len(graph):
end_h += 1
if w+1 < len(graph[h]):
end_w += 1
if w-1 >= 0:
start_w -= 1
for i in range(start_h, end_h+1):
for j in range(start_w, end_w+1):
if graph[i][j] == 1 and not visited[i][j]:
dfs(i, j)
if __name__ == "__main__":
while True:
w, h = list(map(int, sys.stdin.readline().split()))
if w == 0 and h == 0:
break
graph = []
visited = [[False for i in range(w)] for j in range(h)]
for i in range(h):
graph.append(list(map(int, sys.stdin.readline().split())))
num_of_islands = 0
for i in range(h):
for j in range(w):
if not visited[i][j] and graph[i][j] == 1:
num_of_islands += 1
dfs(i, j)
print(num_of_islands)
728x90
'dev > algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ / 11724๋ฒ / ์ฐ๊ฒฐ ์์์ ๊ฐ์ [Go][Python3] (0) | 2020.12.14 |
---|---|
BOJ / 1012๋ฒ / ์ ๊ธฐ๋ ๋ฐฐ์ถ [Go][Python3] (0) | 2020.12.13 |
BOJ / 2644๋ฒ / ์ด์๊ณ์ฐ [Go][Python3] (0) | 2020.12.10 |
BOJ / 10867๋ฒ / ์ค๋ณต ๋นผ๊ณ ์ ๋ ฌํ๊ธฐ [Go][Python3] (0) | 2020.12.09 |
BOJ / 1934๋ฒ / ์ต์๊ณต๋ฐฐ์ [Go][Python3] (0) | 2020.12.08 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ
TAG
- ์๊ฐ๊ต์ฒด
- ๋งฅ๋ถ
- ๋งฅ๋ถ ์ ๊ทธ๋ ์ด๋
- baekjoon
- AWS
- dp
- BFS
- ์คํ
- ํ๋ก์ด๋์์ฌ
- ๋ฐฑ์ค
- ๋ฐ๋
- BOJ
- ๋ชฝ๊ณ ๋๋น
- ์ด๋ถํ์
- ์๋ฐ
- ์๊ณ ๋ฆฌ์ฆ
- ํ
- go
- ๋ธ๋ฃจํธํฌ์ค
- ๋งฅ๋ถํ๋ก
- python3
- Golang
- MongoDB
- dfs
- Macbook pro 2012 mid 13
- ๋ถํ ์ ๋ณต
- ballet
- ํด์๋งต
- java
- Algorithm
- Total
- Today
- Yesterday