-
음료수 얼려 먹기 [그래프 탐색]알고리즘 2023. 3. 6. 16:50
음료수 얼려 먹기
문제
N × M 크기의 얼음 틀이 있다. 구멍이 뚫려 있는 부분은 0, 칸막이가 존재하는 부분은 1로 표시된다.
구멍이 뚫려 있는 부분끼리 상, 하, 좌, 우로 붙어 있는 경우 서로 연결되어 있는 것으로 간주한다.
이때 얼음 틀의 모양이 주어졌을 때 생성되는 총 아이스크림의 개수를 구하는 프로그램을 작성하라.
다음의 4 × 5 얼음 틀 예시에서는 아이스크림이 총 3개가 생성된다
입력
- 첫 번째 줄에 얼음 틀의 세로 길이 N과 가로 길이 M이 주어진다. (1 <= N, M <= 1,000)
- 두 번째 줄부터 N + 1 번째 줄까지 얼음 틀의 형태가 주어진다.
- 이때 구멍이 뚫려있는 부분은 0, 그렇지 않은 부분은 1이다.
출력
한 번에 만들 수 있는 아이스크림의 개수를 출력한다.
입력 예시 1
4 5 00110 00011 11111 00000출력 예시 1
3입력 예시 2
15 14 00000111100000 11111101111110 11011101101110 11011101100000 11011111111111 11011111111100 11000000011111 01111111111111 00000000011111 01111111111000 00011111111000 00000001111000 11111111110011 11100011111111출력 예시2
8
정답 소스
N, M = map(int, input().split()) # 그래프 만들기 stack = [] for i in range(N): stack.append(list(map(int, input()))) # dfs 함수 생성 def dfs(x, y): # 범위를 벗어나면 종료 if x <= -1 or x >= N or y <= -1 or y >= M: return False if stack[x][y] == 0: stack[x][y] = 1 dfs(x - 1, y) dfs(x, y - 1) dfs(x + 1, y) dfs(x, y + 1) return True return False # 모든 노드(위치)에 대하여 음료수 채우기 result = 0 for i in range(N): for j in range(M): if dfs(i, j) == True: result += 1 print(result)'알고리즘' 카테고리의 다른 글
2920 - 음계 (0) 2024.01.10 2609 - 최대공약수와 최소공배수 (0) 2023.03.29 [백준, Python] 9093번 : 단어 뒤집기 (0) 2023.01.25 문자열에서 숫자만 추출하는 방법(Python) (0) 2023.01.25 [백준, Python] 1110번: 더하기 사이클 (0) 2023.01.22