https://www.acmicpc.net/problem/2667
2667번: 단지번호붙이기
<그림 1>과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여
www.acmicpc.net
풀이
- 입력받은 배열에 1이 있다면 dfs 함수를 호출합니다.
- x,y의 인덱스가 n보다 크거나 0보다 작아지면 배열 범위를 벗어나기 때문에 return을 합니다.
- x,y 좌표에 1이 있다면 count을 증가시킵니다. -> 1의 갯수를 셉니다.
- 위,아래,오른쪽,왼쪽을 확인하며 1이 있는지 확인합니다.
- 1이 있다면 다시 dfs을 호출합니다.
import sys
input = sys.stdin.readline
N = int(input())
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
result = []
count = 0
def dfs(x, y):
global count
if x < 0 or x >= N or y < 0 or y >= N:
return
if maps[x][y] == '1':
count += 1
maps[x][y] = '0'
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
dfs(nx, ny)
maps = list()
for i in range(N):
maps.append(list(input()))
for i in range(N):
for j in range(N):
if maps[i][j] == '1':
dfs(i, j)
result.append(count)
count = 0
result.sort()
print(len(result))
for k in result:
print(k)
'코딩테스트 > 백준' 카테고리의 다른 글
[Python] 백준1011. Fly me to the Alpha Centauri (1) | 2024.01.23 |
---|---|
[Python] 백준 1002. 터렛 (1) | 2024.01.23 |
[Python] 백준 15650번. N과 M(2) (0) | 2023.12.26 |
[Python] 백준 12015번. 가장 긴 증가하는 부분 수열2 (0) | 2023.12.19 |
[Python] 백준 2108번. 통계학 (1) | 2023.12.19 |