작은 지식주머니
백준 python 1012 유기농 배추 본문
백준 링크:https://www.acmicpc.net/problem/1012
1012번: 유기농 배추
차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에
www.acmicpc.net
dfs와 bfs 둘다 가능한 문제이다.
dfs 풀이
import sys
sys.setrecursionlimit(100000)
def dfs(x,y):
dx,dy=[0,0,1,-1],[1,-1,0,0]
for i in range(4):
nx,ny=x+dx[i],y+dy[i]
if (0 <= nx < N) and (0 <= ny < M):
if matrix[nx][ny] == 1:
matrix[nx][ny] -= 1
dfs(nx,ny)
TC=int(input())
for _ in range(TC):
M,N,K = map(int,input().split())
matrix=[[0]*M for _ in range(N)]
cnt = 0
for _ in range(K):
m,n=map(int,input().split())
matrix[n][m] = 1
for i in range(N):
for j in range(M):
if matrix[i][j] > 0:
dfs(i,j)
cnt += 1
print(cnt)
bfs풀이
from collections import deque
dx,dy=[-1,1,0,0],[0,0,-1,1]
def bfs(x,y):
q= deque()
q.append((x,y))
done[x][y] = 1
while q:
xx,yy=q.popleft()
for _ in range(4):
nx = xx+dx[_]
ny = yy+dy[_]
if (0<=nx<n) and (0<=ny<m) and done[nx][ny] == -1:
if matrix[nx][ny] == 1:
q.append((nx,ny))
done[nx][ny] = 1
t = int(input())
for __ in range(t):
cnt = 0
n,m,k=map(int,input().split())
matrix=[[0]*m for _ in range(n)]
done = [[-1]*m for _ in range(n)]
for _ in range(k):
a,b=map(int,input().split())
matrix[a][b] = 1
for i in range(n):
for j in range(m):
if matrix[i][j] == 1 and done[i][j] == -1:
bfs(i,j)
cnt +=1
print(cnt)
dfs,bfs의 기본 그런데 이렇게 배열을 만들면 메모리가 너무많이 사용하므로 다른 방법을 추천..
'백준 python 기록' 카테고리의 다른 글
백준 python 11399 ATM (0) | 2021.07.13 |
---|---|
백준 python 1051 숫자 정사각형 (0) | 2021.07.13 |
백준 1260 python DFS와 BFS (0) | 2021.07.09 |
백준 (python 파이썬) 1149 RGB거리 (0) | 2021.07.08 |
백준 python 파이썬 11726 파이썬 2xn 타일링 (0) | 2021.07.07 |
Comments