๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[BAEKJOON python] 14502_์ฐ๊ตฌ์ ๋ณธ๋ฌธ
728x90
๋ฐ์ํ
์ธ์ฒด์ ์น๋ช ์ ์ธ ๋ฐ์ด๋ฌ์ค๋ฅผ ์ฐ๊ตฌํ๋ ์ฐ๊ตฌ์์์ ๋ฐ์ด๋ฌ์ค๊ฐ ์ ์ถ
๋ฐ์ด๋ฌ์ค๋ ์์ง ํผ์ง์ง ์์๊ณ , ๋ฐ์ด๋ฌ์ค์ ํ์ฐ์ ๋ง๊ธฐ ์ํด์ ์ฐ๊ตฌ์์ ๋ฒฝ์ ์ธ์ฐ๋ ค๊ณ ํ๋ค
์ฐ๊ตฌ์๋ ํฌ๊ธฐ๊ฐ N×M์ธ ์ง์ฌ๊ฐํ์ผ๋ก ๋ํ๋ผ ์ ์์ผ๋ฉฐ, ์ง์ฌ๊ฐํ์ 1×1 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ผ๋ก ๋๋์ด์ ธ ์๋ค
์ฐ๊ตฌ์๋ ๋น ์นธ, ๋ฒฝ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๋ฒฝ์ ์นธ ํ๋๋ฅผ ๊ฐ๋ ์ฐจ์งํ๋ค.
์ผ๋ถ ์นธ์ ๋ฐ์ด๋ฌ์ค๊ฐ ์กด์ฌํ๋ฉฐ, ์ด ๋ฐ์ด๋ฌ์ค๋ ์ํ์ข์ฐ๋ก ์ธ์ ํ ๋น ์นธ์ผ๋ก ๋ชจ๋ ํผ์ ธ๋๊ฐ ์ ์๋ค.
์๋ก ์ธ์ธ ์ ์๋ ๋ฒฝ์ ๊ฐ์๋ 3๊ฐ์ด๋ฉฐ, ๊ผญ 3๊ฐ๋ฅผ ์ธ์์ผ ํ๋ค.
0์ ๋น ์นธ, 1์ ๋ฒฝ, 2๋ ๋ฐ์ด๋ฌ์ค๊ฐ ์๋ ๊ณณ์ด๋ค.
์๋ฌด๋ฐ ๋ฒฝ์ ์ธ์ฐ์ง ์๋๋ค๋ฉด, ๋ฐ์ด๋ฌ์ค๋ ๋ชจ๋ ๋น ์นธ์ผ๋ก ํผ์ ธ๋๊ฐ ์ ์๋ค.
๋ฒฝ์ 3๊ฐ ์ธ์ด ๋ค, ๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง ์ ์๋ ๊ณณ์ ์์ ์์ญ
์ฐ๊ตฌ์์ ์ง๋๊ฐ ์ฃผ์ด์ก์ ๋ ์ป์ ์ ์๋ ์์ ์์ญ ํฌ๊ธฐ์ ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑ
์ฒซ์งธ ์ค์ ์ง๋์ ์ธ๋ก ํฌ๊ธฐ N๊ณผ ๊ฐ๋ก ํฌ๊ธฐ M์ด ์ฃผ์ด์ง๋ค. (3 ≤ N, M ≤ 8)
๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ง๋์ ๋ชจ์์ด ์ฃผ์ด์ง๋ค.
0์ ๋น ์นธ, 1์ ๋ฒฝ, 2๋ ๋ฐ์ด๋ฌ์ค๊ฐ ์๋ ์์น
2์ ๊ฐ์๋ 2๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 10๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์
๋น ์นธ์ ๊ฐ์๋ 3๊ฐ ์ด์์ด๋ค.
์ฒซ์งธ ์ค์ ์ป์ ์ ์๋ ์์ ์์ญ์ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ถ๋ ฅ
๐ 1) DFS
# 1) DFS
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
graph = []
for i in range(N) :
graph.append(list(map(int, input().split())))
temp = [[0] * M for _ in range(N)]
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
result = 0
# ๋ฐ์ด๋ฌ์ค ํผ์ง๊ธฐ
def virus(x, y) :
for i in range(4) :
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < N and 0 <= ny < M :
if temp[nx][ny] == 0 : # ๋น์นธ
temp[nx][ny] = 2 # ๋ฐ์ด๋ฌ์ค ํผ์ง
virus(nx, ny)
return
# ์์ ์์ญ ํฌ๊ธฐ ๊ณ์ฐ
def score() :
score = 0
for i in range(N) :
for j in range(M) :
if temp[i][j] == 0 :
score += 1
return score
# DFS ์ด์ฉํด์ ๋ฒฝ ์ค์น
def dfs(cnt) :
global result
if cnt == 3 :
for i in range(N) :
for j in range(M) :
temp[i][j] = graph[i][j]
for i in range(N) :
for j in range(M) :
if temp[i][j] == 2 : # ๋ฐ์ด๋ฌ์ค๋ผ๋ฉด!
virus(i, j) # ํผ์ ธ๋ผ!
result = max(result, score())
return
# ๋ฒฝ ์ธ์ฐ๊ธฐ. ๊ฒฝ์ฐ์ ์ ํ์
for i in range(N) :
for j in range(M) :
if graph[i][j] == 0 :
graph[i][j] = 1 # ๋ฒฝ ์ธ์์
cnt += 1 # ๋ฒฝ ๊ฐ์ ์ฆ๊ฐ
dfs(cnt)
graph[i][j] = 0 # ์ต์ ์ ๊ฒฝ์ฐ์ ์๊ฐ ์๋๋ฉด ์ด๊ธฐํ
cnt -= 1
dfs(0)
print(result)
# input
# 7 7
# 2 0 0 0 1 1 0
# 0 0 1 0 1 2 0
# 0 1 1 0 1 0 0
# 0 1 0 0 0 0 0
# 0 0 0 0 0 1 1
# 0 1 0 0 0 0 0
# 0 1 0 0 0 0 0
# output
# 27
728x90
๋ฐ์ํ
'๐ฆฅ ์ฝํ > BAEKJOON' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BAEKJOON python] 14890_ ๊ฒฝ์ฌ๋ก (0) | 2022.10.12 |
---|---|
[BAEKJOON python] 14503_๋ก๋ด ์ฒญ์๊ธฐ (1) | 2022.10.11 |
[BAEKJOON python] 14500_ํ ํธ๋ก๋ฏธ๋ ธ (0) | 2022.10.10 |
[BAEKJOON python] 14499_์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ (0) | 2022.10.10 |
[BAEKJOON python] 3190_๋ฑ (0) | 2022.10.10 |
Comments