문제링크:https://www.acmicpc.net/problem/1388
다루는 주제: DFS
# 두개의 -- 가 같은 행에 인접해 있으면 두개는 같은 나무 판자이다 , 두개의 |이 같은 열에 인접해 있으면 같은 나무 판자이다.
# dfs 사용해서 다음 노드 확인 후 조건이 맞으면 재귀
import sys
n, m = map(int, sys.stdin.readline().split()) # 세로 n 가로 m
place = []
for _ in range(n):
place.append(list(sys.stdin.readline()))
def dfs(row, col):
# - 일떄
if place[row][col] == "-":
place[row][col] = 1 # 방문처리
for a in [1, -1]: # 같은행 확인하기 양옆
Y = col + a # 같은 나무판자로 만들기
if (0 < Y < m) and place[row][Y] == "-": # 가로를 벗어나지않고 다음 노드가 - 라면 다시 재귀
dfs(row, Y)
# | 일 때
if place[row][col] == "|":
place[row][col] = 1
for b in [1, -1]: # 같은열 확인하기 위아래
X = row + b
if (0 < X < n) and place[X][col] == "|": # 세로를 벗어나지않고 다음 노드가 | 라면 다시 재귀
dfs(X, col)
count = 0
for i in range(n): # 세로 길이만큼
for j in range(m): # 가로 길이만큼
if place[i][j] == '-' or place[i][j] == "|": # 다음노드가 - 나 |일 경우
dfs(i, j) # 재귀함수 호출
count += 1
print(count)
'Algorithm > 백준(파이썬)' 카테고리의 다른 글
백준 1904 파이썬(Python) 문제풀이 01타일 (0) | 2023.04.27 |
---|---|
백준 2748 파이썬(Python) 문제풀이 피보나치 수 2 (0) | 2023.04.27 |
백준 1916 파이썬(Python) 문제풀이 최소비용 구하기 (0) | 2023.04.26 |
백준 18352 파이썬(Python) 문제풀이 특정 거리의 도시 찾기 (0) | 2023.04.26 |
백준 14888 파이썬(Python) 문제풀이 연산자 끼워넣기 (1) | 2023.04.25 |