[python 파이썬] 백준 1012번 유기농배추
1012번: 유기농 배추
차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에
www.acmicpc.net
이 문제는 보아하니 2667번 단지번호붙이기할 때 참고했던 음료수 얼려먹기문제(DFS)와 유사했다.
2667번 문제풀이링크를 참고하겠다.
[python 파이썬] 백준 2667번 단지번호붙이기
과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여" data-og-h
kimmjieun.tistory.com
음료수 얼려먹기 문제와 다른 점은 테스트케이스가 있는 점과 입력형식인데 그 부분만 수정해주면 해결이 되었다.
또한 맞게 풀고 테스트해보니 런타임에러(RecursionError)가 떴다. 이걸 해결하기 위해서는 호출을 제한하는 함수를 호출해야한다.-파이썬에서 DFS BFS풀때 런타임에러를 만난다면 적용해주자
(재귀함수의 최대 재귀 깊이를 수동으로 늘려주는 코드)
import sys
sys.setrecursionlimit(10**8)
또한 출력형식이 잘 맞지않아서 결과를 result라는 리스트에 담고 for문으로 출력하도록 했다.
import sys
sys.setrecursionlimit(10**8) #재귀제한높이설정(기본값이상으로 안해주면 런타임에러) ※기본값:1000
def dfs(x,y):
#주어진 범위를 벗어나는 경우에 즉시 종료
if x <= -1 or x >= n or y <= -1 or y >= m:
return False
# 현재노드를 아직 방문하지 않았다면
if graph[x][y]==1:
#해당노드 방문처리
graph[x][y]=0
#상하좌우의 위치도 모두 재귀적으로 호출
dfs(x-1,y)
dfs(x,y-1)
dfs(x+1,y)
dfs(x,y+1)
return True
return False
def solve():
result=0
for i in range(n):
for j in range(m):
#현재위치에서 dfs수행
if dfs(i,j)==True:
result+=1
print(result)
result=[]
t = int(input())
for tt in range(t):
n,m,k=map(int,input().split())
graph=[[0]*m for i in range(n)]
#배추밭채우기
for _ in range(k):
x,y=map(int,input().split()) #y x ?
graph[x][y]=1
count=0
for i in range(n):
for j in range(m):
#현재위치에서 dfs수행
if dfs(i,j)==True:
count+=1
result.append(count)
for r in result:
print(r)
참고
2차원리스트 0으로 초기화하는 방법
limseee.blogspot.com/2016/06/2-0.html
[파이썬] 2차원 리스트 0으로 초기화 하는 방법
기록의 생활화. 매일 배우는 것들을 정리해서 기록하기 위해 만든 블로그입니다.
limseee.blogspot.com