[백준/Python] DFS/BFS - 1012번 유기농 배추

Sujin Lee·2022년 4월 11일
0

코딩테스트

목록 보기
17/172
post-thumbnail

오 비슷한 문제 발견
DFS - 음료수 얼려 먹기

👩🏻‍🏫 풀이

# 재귀 limit 설정
import sys
sys.setrecursionlimit(10000)

# DFS 정의 
def dfs(x,y):
  # 상,하, 좌,우
  dx = [1, -1, 0, 0] 
  dy = [0, 0, 1, -1]
   
  for i in range(4): 
    nx = x + dx[i] 
    ny = y + dy[i]
    if (0 <= nx < m) and (0 <= ny < n): 
      if graph[ny][nx] == 1:
      	# 방문했다는 표시 -1
        graph[ny][nx] = -1
        dfs(nx, ny)

# 테스트 케이스      
t = int(input())

for i in range(t):
  # 배추밭의 가로길이, 세로길이, 배추가 심어져 있는 위치의 개수
  m,n,k = map(int, input().split())
  graph = [[0]*m for _ in range(n)]
  result = 0
  
  # 배추 위치에 1 표시
  for i in range(k):
    a,b = map(int,input().split())
    graph[b][a] = 1

  # DFS를 활용해서 배추 그룹 수 세기
  for i in range(m):
    for j in range(n):
      if graph[j][i] == 1:
        dfs(i, j)
        result += 1
  
  # 출력
  print(result)   
  • x, y 위치를 지정할 때 헷갈리지 않도록 주의

런타임 에러

정의

  • 프로그램이 실행 도중 비정상적으로 종료되는 것

런타임 에러가 나는 이유

  • 백준 채점 시스템에서 최대 재귀 깊이를 디폴트 값으로 1000으로 정해놓음
  • 런타임 에러는 그 최대 깊이를 초과하여 재귀 호출을 하기 때문에 발생

해결방법

  • 최대 재귀 깊이를 늘려준다!
import sys
sys.setrecursionlimit(10000)
profile
공부한 내용을 기록하는 공간입니다. 📝

0개의 댓글