https://www.acmicpc.net/problem/14502
14502๋ฒ: ์ฐ๊ตฌ์
์ธ์ฒด์ ์น๋ช ์ ์ธ ๋ฐ์ด๋ฌ์ค๋ฅผ ์ฐ๊ตฌํ๋ ์ฐ๊ตฌ์์์ ๋ฐ์ด๋ฌ์ค๊ฐ ์ ์ถ๋์๋ค. ๋คํํ ๋ฐ์ด๋ฌ์ค๋ ์์ง ํผ์ง์ง ์์๊ณ , ๋ฐ์ด๋ฌ์ค์ ํ์ฐ์ ๋ง๊ธฐ ์ํด์ ์ฐ๊ตฌ์์ ๋ฒฝ์ ์ธ์ฐ๋ ค๊ณ ํ๋ค. ์ฐ๊ตฌ์๋ ํฌ
www.acmicpc.net
์ผ๋จ ๋ณด์๋ง์ bfs๋ผ๋ ์๊ฐ์ด ๋ค์๋ค
๋ฒฝ์ ์ด๋ป๊ฒ ์ธ์ธ์ง๊ฐ ๊ณ ๋ฏผ์ด ๋ง์ด ๋์๋ค.
์๊ฐ์ ํ๋ 2์ด๋ก ๋๋ํ๊ณ , n๊ณผ m๋ 8์ดํ๋ก ๋งค์ฐ ์๊ธด ํ์ง๋ง
๊ทธ๋๋ ๋ค ํด๋ณด๋ ๊ฑด ์ข ์ค๋ฐ๋ผ๋ ์๊ฐ์ด ๋ค์๊ธฐ ๋๋ฌธ์.
๊ทธ๋ฐ๋ฐ ๋ค ํด๋ณด๋ ๊ฑฐ ๋ง๊ณ ๋ ๋ค๋ฅธ ์์ด๋์ด๊ฐ ๋์ ํ ๋ ์ค๋ฅด์ง ์์์ ๋ค ํด๋ดค๋ค.
์ฝ๋๋ ์ข ๋๋ฝ์ง๋ง, ๋คํํ ์ ๋ต ํ์ ๋ฐ๊ธด ํ์.
from itertools import combinations
from collections import deque
import sys
input = sys.stdin.readline
n,m = map(int,input().split())
arr=[]
for i in range(n):
arr.append(list(map(int,input().split())))
๋ฒฝ์ ์ธ์ธ ์ขํ๋ค ์กฐํฉ ๋ฆฌ์คํธ ๋ง๋ค๊ธฐ
zero=[]
for i in range(n):
for j in range(m):
if arr[i][j]==0:
zero.append((i,j))
combi = list(combinations(zero,3))
answer=0
q=deque()
dx,dy = [-1,1,0,0],[0,0,1,-1]
arr2=[[0]*m for _ in range(n)]
for c in range(len(combi)):
#๋ฐฐ์ด ๊ฐ ๋ณต์ฌํด์ฃผ๊ธฐ
for i in range(n):
for j in range(m):
arr2[i][j]=arr[i][j]
if arr[i][j]==2:
q.append((i,j))
p1,p2,p3=combi[c]
#๋ฒฝ์ธ์ฐ๊ธฐ
arr2[p1[0]][p1[1]]=1
arr2[p2[0]][p2[1]]=1
arr2[p3[0]][p3[1]]=1
#bfs-->๋ฐ์ด๋ฌ์ค ๊ฐ์ผ์ํค๊ธฐ
while q:
x,y = q.popleft()
for i in range(4):
nx = x+dx[i]
ny = y+dy[i]
if 0<=nx<n and 0<=ny<m and arr2[nx][ny]==0:
arr2[nx][ny]=2
q.append((nx,ny))
#์์ ์์ญ ์ธ๊ธฐ
cnt=0
for i in range(n):
for j in range(m):
if arr2[i][j]==0:
cnt+=1
answer = max(answer,cnt)
print(answer)
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด > DFS,BFS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[softeer] ์ฅ์ ๋ฌผ ์ธ์ ํ๋ก๊ทธ๋จ (0) | 2023.05.16 |
---|---|
[๋ฐฑ์ค]7562๋ฒ: ๋์ดํธ์ ์ด๋ (0) | 2023.03.20 |
[๋ฐฑ์ค]14503๋ฒ: ๋ก๋ด ์ฒญ์๊ธฐ (0) | 2023.03.08 |
[๋ฐฑ์ค]18405๋ฒ: ๊ฒฝ์์ ์ ์ผ (0) | 2023.03.03 |
[๋ฐฑ์ค]7569๋ฒ: ํ ๋งํ (0) | 2023.02.28 |