1. 문제
https://www.acmicpc.net/problem/1012
1012번: 유기농 배추
차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에
www.acmicpc.net
2. 풀이
import sys
input = sys.stdin.readline
sys.setrecursionlimit(2_501)
# n : 테스트 케이스 수
n = int(input())
def veget_find(x, y, land_l):
# print("x :", x, "y :", y)
# for i in land_l:
# print(i)
# print("---------------")
if x > 0 and land_l[y][x-1] == 1:
land_l[y][x-1] = 0
veget_find(x-1, y, land_l)
if x < (len(land_l[0]) - 1) and land_l[y][x+1] == 1:
land_l[y][x+1] = 0
veget_find(x+1, y, land_l)
if y > 0 and land_l[y-1][x] == 1:
land_l[y-1][x] = 0
veget_find(x, y-1, land_l)
if y < (len(land_l) - 1) and land_l[y+1][x] == 1:
land_l[y+1][x] = 0
veget_find(x, y+1, land_l)
for i in range(n):
m, n, v_cnt = map(int, input().split())
land_l = [[0 for q in range(m)] for p in range(n)]
for j in range(v_cnt):
x, y = map(int, input().split())
land_l[y][x] = 1
bug_cnt = 0
for j_k, j_v in enumerate(land_l):
# print("j_k :", j_k, "j_v :", j_v)
for k_k, k_v in enumerate(j_v):
# print("k_k :", k_k, "k_v :", k_v)
if k_v == 1:
bug_cnt += 1
land_l[j_k][k_k] = 0
veget_find(k_k, j_k, land_l)
print(bug_cnt)
3. 후기
- 유기농 배추 문제는 첫 실버 2단계 문제이다.
재귀를 사용하여 해결하였는데, 처음 제출하였을 때 RecursionError로 인한 런타임 에러를 받았다.
이 에러는 파이썬에서 제대로 설계된 재귀여도 호출 횟수가 1000회를 넘어가면 RecursionError를 발생시키기 때문이였는데, 이 횟수는 위 코드의 3번째 라인의 'sys.setrecursionlimit(2_501)'를 통해 해결할 수 있었다.
'알고리즘 공부 > 백준' 카테고리의 다른 글
(Python)백준 코딩테스트 연습 - 친구(1058) (0) | 2023.03.03 |
---|---|
(Python)백준 코딩테스트 연습 - 수열의 합(1024) (0) | 2023.03.01 |
(Python)백준 코딩테스트 연습 - 병든 나이트(1783) (0) | 2023.02.24 |
(Python)백준 코딩테스트 연습 - 분수 합(1735) (0) | 2023.02.23 |
(Python)백준 코딩테스트 연습 - 영식이의 손가락(1614) (0) | 2023.02.22 |