본문 바로가기

알고리즘

파이썬)현수막

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

 

14716번: 현수막

혁진이의 생각대로 프로그램을 구현했을 때, 현수막에서 글자의 개수가 몇 개인지 출력하여라.

www.acmicpc.net

 

import sys
sys.setrecursionlimit(100000)

n, m = map(int, sys.stdin.readline().split())

arr = []

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

one = []

for i in range(n):
    arr.append(list(map(int, sys.stdin.readline().split())))


visit = [[False for _ in range(m)] for _ in range(n)]

cnt = 0


def dfs(x, y):
    visit[x][y] = True

    for i in range(len(dx)):
        nx = x + dx[i]
        ny = y + dy[i]

        if 0 <= nx < n and 0 <= ny < m:
            if visit[nx][ny] == False:
                if arr[nx][ny] == 1:
                    dfs(nx, ny)


for i in range(len(arr)):
    for j in range(len(arr[i])):
        if arr[i][j] == 1 and visit[i][j] == False:
            dfs(i, j)
            cnt += 1

print(cnt)

전형적인 dfs 문제이다.

이 문제 또한 bfs로 풀 수가 있는데, 솔직히 난 bfs보다 dfs가 훨씬 더 편하다.

대신 sys를 적어줘야 한다는 귀찮음...

이걸 안적어줘서 런타임 에러가 발생했다.

항상 sys를 적는 습관을 들이도록 하자.....ㅠㅠ

'알고리즘' 카테고리의 다른 글

파이썬)요격 시스템  (0) 2023.07.12
파이썬)수들의 합2  (0) 2023.07.07
파이썬)치즈  (0) 2023.06.27
파이선)꼬인 전깃줄  (0) 2023.06.09
파이썬) 연구소  (0) 2023.06.04