알고리즘 정복하기!/백준 문제풀이

백준 11123번 Python / DFS

by seokii 2022. 3. 1.
728x90
반응형

문제풀이 GitHub

https://github.com/Seokii/baekjoon

 

GitHub - Seokii/baekjoon: Daily Commit for Baekjoon

Daily Commit for Baekjoon. Contribute to Seokii/baekjoon development by creating an account on GitHub.

github.com

깊이 우선 탐색(DFS)

https://seokii.tistory.com/30 

 

[알고리즘] 깊이 우선 탐색 (DFS, Depth-First Search)이란?

깊이 우선 탐색(DFS, Depth-First Search) - 그래프 탐색에서 루트 노드에서 시작해 다음 분기로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방법 - 재귀 혹은 스택 자료구조를 이용함 장점 - 현 경로

seokii.tistory.com

문제 링크

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

 

11123번: 양 한마리... 양 두마리...

얼마전에 나는 불면증에 시달렸지... 천장이 뚫어져라 뜬 눈으로 밤을 지새우곤 했었지.  그러던 어느 날 내 친구 광민이에게 나의 불면증에 대해 말했더니 이렇게 말하더군. "양이라도 세봐!"  

www.acmicpc.net

 

풀이

import sys
sys.setrecursionlimit(10 ** 6) # 재귀 런타임 에러 해결 코드(허용 깊이를 늘려줌)

def dfs(x,y):
    if x <= -1 or x >= h or y <= -1 or y >= w:
        return False
    if graph[x][y] == "#":
        graph[x][y] = "."
        cnt.append(1)

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

        return True
    return False

t = int(input())
res = []
temp = []

for _ in range(t):
    cnt = []
    h,w = map(int, input().split())
    graph = [list(map(str, input().strip())) for _ in range(h)]
    for i in range(h):
        for j in range(w):
            if graph[i][j] == "#":
                dfs(i,j)
                temp.append(len(cnt))
                cnt = []

    print(len(temp))
    temp = []

전형적인 DFS, BFS를 활용한 문제입니다.

DFS 방식으로 문제를 해결했습니다.

 

 

728x90
반응형

댓글