Algorithm

백준 1012번 : 유기농 배추

jun_code 2022. 1. 16. 13:51

<문제>

링크 : https://www.acmicpc.net/problem/1012

 

1012번: 유기농 배추

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

www.acmicpc.net


<코드>

import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline

def dfs(x, y):
    _x = [0, 0, 1, -1]
    _y = [1, -1, 0, 0]
    for i in range(4):
        m_x = x+_x[i]
        m_y = y+_y[i]
        if (0<=m_x and m_x <M) and (0<=m_y and m_y<N) and mat[m_x][m_y] ==1:
            mat[m_x][m_y] =0
            dfs(m_x, m_y)
num_list = []
T = int(input())
for _i in range(T):
    M, N, K = map(int, input().split())
    mat = [[0]*N for _j in range(M)]
    num = 0
    for _i in range(K):
        x, y = map(int, input().split())
        mat[x][y] = 1
    for i in range(M):
        for j in range(N):
            if mat[i][j] == 1:
                dfs(i, j)
                num +=1
    num_list.append(num)
for _i in range(T):
    print(num_list[_i])

 


<풀이>

배추밭을 Matrix형식으로 2x2 행렬로 배추가 심어진 곳을 1, 심어지지 않은 곳을 0으로 지정한다.

  • [0,0]부터 탐색하여 특정 위치에서 값이 1인 경우 배추가 심어져 있음을 파악하고 이웃한 네 지점에 배추가 심어져 있는지 확인한다.
  • 해당 조건으로 좌표값이 범위 내에 있고 이웃한 위치에서 원소값이 1인 경우 하나로 묶이므로 원소값을 0으로 변경해 준다 => 한 마리의 지렁이로 해당 영역을 커버할 수 있다.
  • 모든 행렬의 각 위치에서 배추가 심어져 있는지 판단해야하므로 M*N개의 값에 접근한다.

참고 : https://github.com/Junuux/Algorithm/tree/main/Silver/1012

 

GitHub - Junuux/Algorithm

Contribute to Junuux/Algorithm development by creating an account on GitHub.

github.com