본문 바로가기
IT 이야기/알고리즘 공부

Backjoon 1012번 유기농 배추

by Dblog 2020. 8. 12.
728x90

백준 알고리즘


DFS를 사용하면 풀수 있는 문제입니다. 이번에는 스택이나 큐를 사용하지 않고 리스트와 리컬시브만을 사용해서 풀어봤습니다.
결국 DFS도 스택큐를 이용한 리컬시브겠죠? 1이 있는 곳에서 상하좌우를 순회하며 1을 다 0으로 바꿉니다.
그럼 sol 함수가 몇번 호출되는지 카운팅 하면 답이 됩니다.


정답 코드

import sys
sys.setrecursionlimit(50000)
def sol(x,y):
    mat[x][y]= 0
    for i in range(4):
        mx = dx[i]+x
        my = dy[i]+y
        if (0<=mx<n and 0<=my<m and mat[mx][my]==1):
            sol(mx,my)            
t= int(input())
dx=[0,0,1,-1]
dy=[1,-1,0,0]
for i in range(t):
    m,n,k=map(int,input().split())
    mat=[[0]*m for i in range(n)]
    for i in range(k):
        a,b = map(int,input().split())
        mat[b][a] = 1        
    ans=0
    for i in range(n):
        for j in range(m):
            if (mat[i][j]==1):
                sol(i,j)
                ans+=1
    print(ans)
728x90

'IT 이야기 > 알고리즘 공부' 카테고리의 다른 글

[Programmers] 기능개발  (0) 2020.11.14
Backjoon 1920번 수 찾기  (0) 2020.08.12
Backjoon 15651번 n과 M 링크  (0) 2020.08.12
Backjoon 12852번 1로 만들기 2  (0) 2020.08.06
Backjoon 11047번 동전 0  (0) 2020.08.06

댓글