happyso
study with happyso
happyso
전체 방문자
오늘
어제
  • 분류 전체보기 (300)
    • GIT (3)
    • 컴퓨터 기본 개념 (29)
    • 알고리즘 (125)
      • 알고리즘 문제 (115)
      • 알고리즘 개념 (10)
    • Go (2)
    • 클라우드 (53)
      • DevOps (3)
      • Kubernetes(쿠버네티스) (33)
      • AWS (6)
      • CKA (8)
    • 리눅스(Linux) (18)
      • 컨테이너(Container) (8)
    • Front (22)
      • JavaScript (2)
      • React (20)
    • Python (21)
      • Python 웹 크롤링 (11)
      • Django (7)
      • MachineLearning (3)
    • 데이터베이스 (6)
      • MariaDB (2)
      • MongoDB (4)
    • C언어 (5)
    • Trouble Shooting (2)
    • 네트워크 (8)
      • CCNA (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Patch
  • replace
  • edit
  • kubernetes
  • 15
  • apply
  • 18

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
happyso

study with happyso

[python] 백준 > DFS > 유기농 배추(1012)
알고리즘/알고리즘 문제

[python] 백준 > DFS > 유기농 배추(1012)

2021. 3. 1. 02:54

[문제]

차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 효과적인 배추흰지렁이를 구입하기로 결심한다. 이 지렁이는 배추근처에 서식하며 해충을 잡아 먹음으로써 배추를 보호한다. 특히, 어떤 배추에 배추흰지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 수 있어, 그 배추들 역시 해충으로부터 보호받을 수 있다.

(한 배추의 상하좌우 네 방향에 다른 배추가 위치한 경우에 서로 인접해있다고 간주한다)

한나가 배추를 재배하는 땅은 고르지 못해서 배추를 군데군데 심어놓았다. 배추들이 모여있는 곳에는 배추흰지렁이가 한 마리만 있으면 되므로 서로 인접해있는 배추들이 몇 군데에 퍼져있는지 조사하면 총 몇 마리의 지렁이가 필요한지 알 수 있다.

예를 들어 배추밭이 아래와 같이 구성되어 있으면 최소 5마리의 배추흰지렁이가 필요하다.

(0은 배추가 심어져 있지 않은 땅이고, 1은 배추가 심어져 있는 땅을 나타낸다.)

입력

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 첫째 줄에는 배추를 심은 배추밭의 가로길이 M(1 ≤ M ≤ 50)과 세로길이 N(1 ≤ N ≤ 50), 그리고 배추가 심어져 있는 위치의 개수 K(1 ≤ K ≤ 2500)이 주어진다. 그 다음 K줄에는 배추의 위치 X(0 ≤ X ≤ M-1), Y(0 ≤ Y ≤ N-1)가 주어진다.

출력

각 테스트 케이스에 대해 필요한 최소의 배추흰지렁이 마리 수를 출력한다.

 

 

www.acmicpc.net/problem/1012

 

1012번: 유기농 배추

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

www.acmicpc.net

[나의 풀이]

import sys
sys.setrecursionlimit(10000)
input = sys.stdin.readline

def dfs(arr, visited, x, y):
    dx = [0, 0, -1, 1]
    dy = [-1, 1, 0, 0]

    visited[x][y] = True
    for i in range(4):
        sx, sy = x+dx[i], y+dy[i]
        if 0<=sx<n and 0<=sy<m and not visited[sx][sy] and arr[sx][sy]==1:
            dfs(arr, visited, sx, sy)

t = int(input())
for _ in range(t):
    m, n, k = map(int, input().split())
    arr = [[0]*m for _ in range(n)]
    for _ in range(k):
        a, b = map(int, input().split())
        arr[b][a]=1
    
    answer = 0
    visited = [[False]*m for _ in range(n)]
    for x in range(n):
        for y in range(m):
            if not visited[x][y] and arr[x][y]==1:
                dfs(arr, visited, x, y)
                answer += 1
    print(answer)
  • 처음에 런타임 에러가 났다. sys.setrecursionlimit(10000)를 지정해주니 나지 않았다.
  • 최대 재귀 한도 에러때문이라 재귀 한도를 늘려주면 됐다.

'알고리즘 > 알고리즘 문제' 카테고리의 다른 글

[python] 백준 > 이중 우선순위 큐(7662)  (0) 2021.03.03
[python] 백준 > DP > 1로 만들기(1463)  (0) 2021.03.02
[python] 백준 > DP > 피보나치함수(1003)  (0) 2021.03.01
[python] 프로그래머스 > 힙 > 더 맵게  (0) 2021.02.27
[java, python] 백준 > DP > 다이나믹이 뭐예요?(14494)  (0) 2021.02.26
    '알고리즘/알고리즘 문제' 카테고리의 다른 글
    • [python] 백준 > 이중 우선순위 큐(7662)
    • [python] 백준 > DP > 1로 만들기(1463)
    • [python] 백준 > DP > 피보나치함수(1003)
    • [python] 프로그래머스 > 힙 > 더 맵게
    happyso
    happyso

    티스토리툴바