[백준] 유기농 배추 (파이썬)

서봉성·2023년 5월 8일
0

코딩테스트

목록 보기
13/27

문제

https://www.acmicpc.net/problem/1012

풀이방법

  • 모든 유기농 밭을 순회한다.
  • 배추를 심은 곳을 발견하면 카운트 한 후 인접해있는 모든 배추를 심은 곳을 평지로 바꿔준다(1을 0으로 바꿈)

코드

from collections import deque

t=int(input())

dx=[0, 0, 1, -1]
dy=[1, -1, 0, 0]

def bfs(arr, y, x):
    dq=deque()
    dq.append((y, x))
    while dq:
        yy, xx = dq.popleft()
        arr[yy][xx]=0
        for i in range(4):
            nx=xx+dx[i]
            ny=yy+dy[i]
            if 0<=nx and nx<m and 0<=ny and ny<n:
                if arr[ny][nx]==1:
                    dq.append((ny, nx))
                    arr[ny][nx]=0

for _ in range(t):
    m, n, k = map(int, input().split())
    arr=[[0]*m for _ in range(n)]
    
    for i in range(k):
        x, y = map(int, input().split())
        arr[y][x]=1
    
    cnt=0
    for i in range(n):
        for j in range(m):
            if arr[i][j]==1:
                cnt+=1
                bfs(arr, i, j)
                                
    print(cnt)

어려웠던 점

처음에는 bfs함수를 정의하지않고 메인함수 안에 while문을 사용하여 풀었다.
함수를 정의해서 푸나 안에서 푸나 똑같다고 생각했지만 메모리 초과로 풀이가 안됐다.
아무리 생각해도 외부에서 선언한 것과 내부에서 푼 것과의 차이를 몰라 질문 게시판에 올렸다.

profile
OverStudy

0개의 댓글