본문 바로가기
백준알고리즘/DFS 와 BFS

(Python/🥈2)백준 알고리즘 1012번: 유기농 배추

by windy7271 2023. 2. 14.
728x90
반응형

문제 출처: https://www.acmicpc.net/problem/1012

 

1012번: 유기농 배추

차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 

www.acmicpc.net

풀이:

 

import sys
from collections import deque

T = int(input())
move = [(0,1),(0,-1),(1,0),(-1,0)]
 # 가로 세로 K갯수
def bfs(a,b):
    Q = deque([(a,b)])
    visited[a][b] = 0 # 1을 0 으로 방문했음
    while Q:
        x,y = Q.popleft()
        for sx, sy in move:
            dx, dy = x + sx, y + sy
            if dx < 0 or dx >= N or dy < 0 or dy >= M:
                continue
            if visited[dx][dy] == 1:
                Q.append((dx,dy))
                visited[dx][dy] = 0

for i in range(T):
    M, N, K = map(int,input().split())
    visited = [[0]*(M) for _ in range(N)]
    cnt = 0
    for j in range(K):
        x, y = map(int, input().split(" "))
        visited[y][x] = 1

    for a in range(N):
        for b in range(M):
            if visited[a][b] == 1:
                bfs(a,b)
                cnt += 1

    print(cnt)

 

한 번 bfs가 실행될때 마다 카운트를 1 늘리면 된다.

for j in range(K):
    x, y = map(int, input().split(" "))
    visited[y][x] = 1

y가 앞에 들어가야지 y는 층수니깐 0 층에 0 / 0층에1 이런식으로 들어간다.

 

for a in range(N):
    for b in range(M):
        if visited[a][b] == 1:
            bfs(a,b)
            cnt += 1

M 가로, N은 세로 visited[a][b] 가 1 > 밟을수 있는 땅이면 bfs 출발하고

def bfs(a,b):
    Q = deque([(a,b)])
    visited[a][b] = 0 # 1을 0 으로 방문했음
    while Q:
        x,y = Q.popleft()
        for sx, sy in move:
            dx, dy = x + sx, y + sy
            if dx < 0 or dx >= N or dy < 0 or dy >= M:
                continue
            if visited[dx][dy] == 1:
                Q.append((dx,dy))
                visited[dx][dy] = 0

계속해오던거 이어서 밟을 수 있는땅 0 으로 다 만들어 줌 

반응형

댓글