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

[백준] 1012. 유기농 배추 - python3

by 풍파 2022. 6. 15.

1012. 유기농 배추

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

 

1012번: 유기농 배추

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

www.acmicpc.net

 

 

내 풀이 - 성공

from sys import stdin
import sys

sys.setrecursionlimit(10**6)

T = int(stdin.readline())

def func(field, i, j):
    field[i][j] = 0
    
    if i > 0 and field[i-1][j]:
        func(field, i-1, j)
    if j > 0 and field[i][j-1]:
        func(field, i, j-1)
    if i < len(field)-1 and field[i+1][j]:
        func(field, i+1, j)
    if j < len(field[0])-1 and field[i][j+1]:
        func(field, i, j+1)

for _ in range(T):
    M, N, K = map(int, stdin.readline().split())
    answer = 0
    field = []
    for i in range(N):
        field.append([0]*M)

    for k in range(K):
        X, Y = map(int, stdin.readline().split())
        field[Y][X] = 1
    
    for i in range(N):
        for j in range(M):
            if field[i][j]:
                answer += 1
                func(field, i, j)
    
    print(answer)

 

field 라는 2차원 배열을 만들어주고 배추는 1, 아닌 부분은 0 으로 채워줬다.

다시 하나씩 보면서 1 을 만나면 재귀를 이용해 1 과 연결된 배추들을 모두 0 으로 바꿔줬다.

그럴 때마다 answer 도 + 1

 

참고로 파이썬의 기본 재귀 깊이는 1000 이라서 매우 얕기 때문에

sys.setrecursionlimit 으로 늘려줘야 정상적으로 돌아간다.

 

없으면 런타임 에러 (RecursionError) 뜸

 

댓글