백준 2667번 python 풀이 - 단지번호붙이기
문제 링크
해결책
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import sys
N = int(sys.stdin.readline().rstrip())
maps = []
is_visited = [[False for i in range(N)] for j in range(N)]
for i in range(N):
maps.append(list(sys.stdin.readline().rstrip()))
apt_list = []
cur_idx_apt = -1
dx = [1,-1,0,0]
dy = [0,0,1,-1]
for i in range(N):
for j in range(N):
if(is_visited[i][j] is False and maps[i][j] == "1"):
cur_idx_apt += 1
stk = [(i,j)]
is_visited[i][j] = True
apt_list.append(1)
while stk:
nx, ny = stk.pop()
for way in range(4):
nxt_x = nx + dx[way]
nxt_y = ny + dy[way]
if(-1<nxt_x<N and -1<nxt_y<N):
if(maps[nxt_x][nxt_y] == "1" and is_visited[nxt_x][nxt_y] is False):
stk.append((nxt_x, nxt_y))
is_visited[nxt_x][nxt_y] = True
apt_list[cur_idx_apt] += 1
print(cur_idx_apt + 1)
apt_list.sort()
for ans in apt_list:
print(ans)
주석으로 달 설명
시험으로 제시된 문제 2번. 동일하게 각 구역별 완전 탐색을 이용해서 전체의 단지 그룹 수와 각 그룹의 대한 요소의 갯수를 오름차순으로 출력하면 되는 문제이다.
This post is licensed under CC BY 4.0 by the author.