반응형
문제
https://www.acmicpc.net/problem/1012
입력
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 첫째 줄에는 배추를 심은 배추밭의 가로길이 M(1 ≤ M ≤ 50)과 세로길이 N(1 ≤ N ≤ 50), 그리고 배추가 심어져 있는 위치의 개수 K(1 ≤ K ≤ 2500)이 주어진다. 그 다음 K줄에는 배추의 위치 X(0 ≤ X ≤ M-1), Y(0 ≤ Y ≤ N-1)가 주어진다. 두 배추의 위치가 같은 경우는 없다.
출력
각 테스트 케이스에 대해 필요한 최소의 배추흰지렁이 마리 수를 출력한다.
코드
import sys
sys.setrecursionlimit(10**7)
input=sys.stdin.readline
def dfs(x,y):
if 0>x or y<0 or x>=m or y>=n:
return False
if array[x][y]==1:
array[x][y]=0
dfs(x-1,y)
dfs(x+1,y)
dfs(x,y-1)
dfs(x,y+1)
return True
return False
T=int(input())
for l in range(T):
cnt1=0
m,n,k= map(int, input().split())
array=[[0]*n for _ in range(m)]
for j in range(k):
x, y= map(int,input().split())
array[x][y]=1
for i in range(m):
for j in range(n):
if dfs(i,j)==True:
cnt1+=1
print(cnt1)
문제해결
기본적인 dfs/bfs 문제로 dfs로 풀었지만 bfs로도 해결가능하다.
본 문제에서의 함정은 x,y가 반대로 들어오기때문에 런타임 에러를 겪기도 하므로 실수를 주의해야한다.
또한 파이썬의 런타임 에러를 주의해야한다.
recursion의 깊이가 너무 적게 지정되는 경우 재귀를 하다가 런타임 에러가 발생할 수 있으므로
코드 상단의 내용을 추가해주면 됩니다.
반응형
'Problem Solving > 백준' 카테고리의 다른 글
[백준] 1107번: 리모컨 - [Python/파이썬] (0) | 2023.04.11 |
---|---|
[백준] 1065번: 한수 - [C/씨언어] (0) | 2023.04.11 |
[백준] 1008번 : A/B - [Python/파이썬] (0) | 2023.04.11 |
[백준] 1003번: 피보나치 함수 - [Python/파이썬] (0) | 2023.04.11 |
[백준] 1001번 : A-B - [Python/파이썬] (0) | 2023.04.11 |