카테고리 없음

07.23 TIL

rlarudals 2024. 7. 23. 20:58

import sys
sys.setrecursionlimit(10**7)

def dfs(x,y):
    if x <= -1 or x >= M or y <= -1 or y >= N:
        return False

    if graph[x][y] == 1:
        graph[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(sys.stdin.readline())

for _ in range(T):

    M, N, K = map(int,sys.stdin.readline().split())
    graph = [[0] * N for _ in range(M)]

    for _ in range(K):
        x,y = map(int,sys.stdin.readline().split())
        graph[x][y] = 1

    count = 0

    for i in range(N):
        for j in range(M):
            if dfs(i,j):
                count += 1

    print(count)

 

오늘은 이 문제를 풀었다.

 

솔직히 나한테는 굉장히 어려운 수준의 문제였다. 백트래킹에 대해 이해는 어느정도 하였지만 아직 내 맘대로 구현을 하지 못 하기 때문이다. 그래도 이 문제를 풀면서 배운점은 있는법

 

dfs(x - 1, y)
dfs(x + 1, y)
dfs(x, y - 1)
dfs(x, y + 1)

 

오늘은 이 부분인것 같다 . 이 코드의 내용은 쉽게 말하면 동서남북을 탐색하게 해줄 수 있게 해주는 코드다.

내가 볼땐 이 코드의 30% 는 저 4줄짜리 밖에 안되는 코드에서 나오는 것 같다. 이런 썅... 

 

오늘 내가 느낀거는 백트래킹에 대해 더 공부를 해야 앞으로 배울 때 쉬워질 것 같다 라는 것을 느꼈다.