2024. 9. 30. 08:54ใAlgorithm ( p & swlug )/Baekjoon
๐๊ณผ์ 2
1012๋ฒ: ์ ๊ธฐ๋ ๋ฐฐ์ถ (acmicpc.net)
๋ฌธ์
์ฐจ์ธ๋ ์๋์ธ ํ๋๋ ๊ฐ์๋ ๊ณ ๋ญ์ง์์ ์ ๊ธฐ๋ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๊ธฐ๋ก ํ์๋ค. ๋์ฝ์ ์ฐ์ง ์๊ณ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๋ ค๋ฉด ๋ฐฐ์ถ๋ฅผ ํด์ถฉ์ผ๋ก๋ถํฐ ๋ณดํธํ๋ ๊ฒ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์, ํ๋๋ ํด์ถฉ ๋ฐฉ์ง์ ํจ๊ณผ์ ์ธ ๋ฐฐ์ถํฐ์ง๋ ์ด๋ฅผ ๊ตฌ์ ํ๊ธฐ๋ก ๊ฒฐ์ฌํ๋ค. ์ด ์ง๋ ์ด๋ ๋ฐฐ์ถ๊ทผ์ฒ์ ์์ํ๋ฉฐ ํด์ถฉ์ ์ก์ ๋จน์์ผ๋ก์จ ๋ฐฐ์ถ๋ฅผ ๋ณดํธํ๋ค. ํนํ, ์ด๋ค ๋ฐฐ์ถ์ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ํ ๋ง๋ฆฌ๋ผ๋ ์ด๊ณ ์์ผ๋ฉด ์ด ์ง๋ ์ด๋ ์ธ์ ํ ๋ค๋ฅธ ๋ฐฐ์ถ๋ก ์ด๋ํ ์ ์์ด, ๊ทธ ๋ฐฐ์ถ๋ค ์ญ์ ํด์ถฉ์ผ๋ก๋ถํฐ ๋ณดํธ๋ฐ์ ์ ์๋ค. ํ ๋ฐฐ์ถ์ ์ํ์ข์ฐ ๋ค ๋ฐฉํฅ์ ๋ค๋ฅธ ๋ฐฐ์ถ๊ฐ ์์นํ ๊ฒฝ์ฐ์ ์๋ก ์ธ์ ํด์๋ ๊ฒ์ด๋ค.
ํ๋๊ฐ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๋ ๋ ์ ๊ณ ๋ฅด์ง ๋ชปํด์ ๋ฐฐ์ถ๋ฅผ ๊ตฐ๋ฐ๊ตฐ๋ฐ ์ฌ์ด ๋์๋ค. ๋ฐฐ์ถ๋ค์ด ๋ชจ์ฌ์๋ ๊ณณ์๋ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ํ ๋ง๋ฆฌ๋ง ์์ผ๋ฉด ๋๋ฏ๋ก ์๋ก ์ธ์ ํด์๋ ๋ฐฐ์ถ๋ค์ด ๋ช ๊ตฐ๋ฐ์ ํผ์ ธ์๋์ง ์กฐ์ฌํ๋ฉด ์ด ๋ช ๋ง๋ฆฌ์ ์ง๋ ์ด๊ฐ ํ์ํ์ง ์ ์ ์๋ค. ์๋ฅผ ๋ค์ด ๋ฐฐ์ถ๋ฐญ์ด ์๋์ ๊ฐ์ด ๊ตฌ์ฑ๋์ด ์์ผ๋ฉด ์ต์ 5๋ง๋ฆฌ์ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ํ์ํ๋ค. 0์ ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ ์์ง ์์ ๋ ์ด๊ณ , 1์ ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ ์๋ ๋ ์ ๋ํ๋ธ๋ค.
์ ๋ ฅ
์ ๋ ฅ์ ์ฒซ ์ค์๋ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ T๊ฐ ์ฃผ์ด์ง๋ค. ๊ทธ ๋ค์ ์ค๋ถํฐ ๊ฐ๊ฐ์ ํ ์คํธ ์ผ์ด์ค์ ๋ํด ์ฒซ์งธ ์ค์๋ ๋ฐฐ์ถ๋ฅผ ์ฌ์ ๋ฐฐ์ถ๋ฐญ์ ๊ฐ๋ก๊ธธ์ด M(1 ≤ M ≤ 50)๊ณผ ์ธ๋ก๊ธธ์ด N(1 ≤ N ≤ 50), ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ ์๋ ์์น์ ๊ฐ์ K(1 ≤ K ≤ 2500)์ด ์ฃผ์ด์ง๋ค. ๊ทธ ๋ค์ K์ค์๋ ๋ฐฐ์ถ์ ์์น X(0 ≤ X ≤ M-1), Y(0 ≤ Y ≤ N-1)๊ฐ ์ฃผ์ด์ง๋ค. ๋ ๋ฐฐ์ถ์ ์์น๊ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ ์๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด ํ์ํ ์ต์์ ๋ฐฐ์ถํฐ์ง๋ ์ด ๋ง๋ฆฌ ์๋ฅผ ์ถ๋ ฅํ๋ค.
๐๋ด ํ์ด
์ฐ์ ํ ๋ฐฐ์ถ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฌ๋ฐฉ์ผ๋ก ๋ฐฐ์ถ๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ, ๊ณ์ ๋ฐฐ์ถํฐ์ง๋ ์ด์ ์ํ๋ฅผ ๋๋ฆด ์ ์๋ ๊ฒ ๊ฐ์๋ค.
๊ทผ๋ฐ ์ด๊ฑธ ๋ฌธ์ ๋ก ๊ตฌํํ๋ ค๋ฉด ์ขํ๋ฅผ ๊ตฌํํ ์ ์์ด์ผํ ๊ฒ ๊ฐ์๋ฐ, ์ผ๋จ์ for๋ฌธ์ ํ์ฉํด์ ์ํ์ข์ฐ ์ขํ์ด๋ํ๋ฏ์ด
ํ์ด๋ด๋ฉด ๋ ๊ฒ ๊ฐ์๋ค.
์๋ ์๊ณ ๋ฆฌ์ฆ ์์ ์๊ฐ์ ๋ฐฐ์ ๋ ๊ธฐ์ต์ ๋ค๋ฌ์ด๊ฐ๋ฉด์ ์ฝ๋๋ฅผ ๊ตฌํํด ๋ณด๋๋ฐ for๋ฌธ๊ณผ ์ขํ x,y๋ฅผ ์ํ ํจ์๋ฅผ ๋ง๋ค์ด์ผ๊ฒ ๋ค๋ ์๊ฐ ์ด์์ผ๋ก ๋์๊ฐ์ง ๋ชปํ๋ค.
๊ทธ๋์ ํด๋น ๊ด๋ จ๋ ๋ด์ฉ์ ์ฐพ์๋ณด์๋ค.
๐ ์ฝ๋ & ์ฝ๋ ๋ถ์
import sys
sys.setrecursionlimit(10000)
def dfs(x, y):
dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if (0 <= nx < m) and (0 <= ny < n):
if field[ny][nx] == 1:
field[ny][nx] = 0
dfs(nx, ny)
for _ in range(int(sys.stdin.readline())):
m, n, k = map(int, sys.stdin.readline().split())
field = [[0 for _ in range(m)] for _ in range(n)]
count = 0
for _ in range(k):
x, y = map(int, sys.stdin.readline().split())
field[y][x] = 1
for x in range(m):
for y in range(n):
if field[y][x] == 1:
dfs(x, y)
count += 1
print(count)
ํ์ด ๊ณต๋ถ๋ฅผ ์์ํด๋ณด๊ฒ ๋ค.
์ผ๋จ ์ฒซ์ค์ ์ดํด๋ณด์.
import sys
sys.setrecursionlimit(10000)
ํด๋น์ฝ๋๋ ์ฐ์ ์ ๋ ฅ, ์ฌ๊ท๋ฅผ ์ํด ํญ์ ํ์ํ ์ฝ๋์ด๋ค.
for _ in range(int(sys.stdin.readline())):
m, n, k = map(int, sys.stdin.readline().split())
field = [[0 for _ in range(m)] for _ in range(n)]
count = 0
ํด๋น ์ฝ๋๋ ํ ์คํธ ์ผ์ด์ค ์ ๋งํผ ๋ฐ๋ณตํ๋๋ก ํ๋ ๊ฒ์ธ๋ฐ, ๋ฐฐ์ถ ๋ฐญ ๊ฐ๋ก, ์ธ๋ก, ๋ฐฐ์ถ ์๋ฅผ ์ ๋ ฅ๋ฐ๊ณ ๋ฐฐ์ถ ๋ฐญ ํฌ๊ธฐ๋งํผ 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ 0์ผ๋ก ์ด๊ธฐํํ๋ค.
for _ in range(int(sys.stdin.readline())):
m, n, k = map(int, sys.stdin.readline().split())
field = [[0 for _ in range(m)] for _ in range(n)]
count = 0
for _ in range(k):
x, y = map(int, sys.stdin.readline().split())
field[y][x] = 1
ํด๋น ์ฝ๋๋ ๋ฐฐ์ถ์ ๋งํผ ๋ฐ๋ณต๋ฌธ์ ๋๋ ค์ ๋ฐฐ์ถ ์ขํ ์ ๋ ฅ์ ๋ฐ๊ณ ๋ฆฌ์คํธ์ ํ์๋๋๋ก ํ๋ ๊ฒ์ด๋ค.
for _ in range(int(sys.stdin.readline())):
m, n, k = map(int, sys.stdin.readline().split())
field = [[0 for _ in range(m)] for _ in range(n)]
count = 0
for _ in range(k):
x, y = map(int, sys.stdin.readline().split())
field[y][x] = 1
for x in range(m):
for y in range(n):
if field[y][x] == 1:
dfs(x, y)
count += 1
ํด๋น์ฝ๋๋ 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ๋๋ฉด์ ๋ฐฐ์ถ๋ฅผ ๊ฒ์ฆํ๋ ๊ฒ์ธ๋ฐ, ๋ง์ฝ ๋ฐฐ์ถ์ผ ๊ฒฝ์ฐ dfs๋ฅผ ํธ์ถํ๊ณ ๋ฒ๋ ํ๋ง๋ฆฌ๋ฅผ ์นด์ดํธํ ์
์๋ค.
def dfs(x, y):
dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]
ํด๋น์ฝ๋๋ dfsํจ์๋ฅผ ๋ํ๋ด๋ ๊ฒ์ผ๋ก ์ํ์ข์ฐ ์ขํ๋ฅผ ์ํ dx,dy ๋ฆฌ์คํธ๋ฅผ ์ ์ธํ๊ธฐ์ํจ์ด๋ค.
def dfs(x, y):
dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
ํด๋น ์ฝ๋๋ x,y์ ์ํ์ข์ฐ ์ขํ nx,ny ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ฝ๋์ด๋ค.
def dfs(x, y):
dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if (0 <= nx < m) and (0 <= ny < n):
if field[ny][nx] == 1:
field[ny][nx] = 0
dfs(nx, ny)
nx, ny ๊ฐ ๋ฆฌ์คํธ ์ธ๋ฑ์ค ๋ฒ์ ์์ ์๋์ง ๊ฒ์ฆํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ ๋ฐฐ์ถ๋ฅผ ๊ฒ์ฆํ๋๋ฐ, ๋ฐฐ์ถ๊ฐ ์กด์ฌํ๋ค๋ฉด ๋ฐฉ๋ฌธ ํ์ํ์ฌ ๋ ์ด์ ๋ฐฉ๋ฌธํ์ง ์๋๋ก ํ๋ ๊ฒ์ด๋ค.
๊ทธ ํ ํด๋น ์ขํ๋ก dfs ์ฌ๊ทํธ์ถ(๋๋ค๋ฅธ ์ํ์ข์ฐ ์ขํ ๊ฒ์ฆ)์ ํ๋ค.
๋ง์ง๋ง์ printf๋ก ๋ฒ๋ ์๋ฅผ ์ถ๋ ฅํ๋ค.
๐ ๋๋์
2์ฐจ์ ๋ฐฐ์ด๊ณผ ๊ด๋ จํ ์๊ณ ๋ฆฌ์ฆ๋ฌธ์ ์ธ๋ฐ ์๋ ์๊ณ ๋ฆฌ์ฆ๋ ๋ฐฐ์ด ์ดํ ๋ณต์ตํ์ง ์์์ ๊ทธ๋ฐ์ง ์์ง ์ต์ํ์ง ์์ ๊ฒ ๊ฐ๋ค.
๋ฐ๋ณต๋ฌธ๊ณผ ์ขํ๋ฅผ ์ด์ฉํด ๊ตฌํํด์ผํ๋ค๋ ๊ฒ ์ด์ธ์ ์ฝ๋๋ฅผ ์ง๋๋ฐ ๋์์ด ์์ด๋ ์ด๋ ค์ ๊ณ , ์ต์ํด์ง๋๋ก ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ๊พธ์คํ ํธ๋๊ฒ ์ค์ํ ๊ฒ ๊ฐ๋ค.
[์ฐธ๊ณ ํ ์๋ฃ]
https://develop247.tistory.com/239