코딩문제
백준 2667 단지번호 붙이기
JihyunLee
2022. 6. 16. 16:06
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
39
40
41
42
43
44
45
46
47
48
49
|
# 단지 번호붙이기
import sys
from collections import deque
dx = [-1,1,0,0]
dy = [0,0,-1,1]
N = int(sys.stdin.readline().split()[0])
x,y = N,N
data = [[0] * y for _ in range(x)]
visit = [[0] * y for _ in range(x)]
for i in range(x):
line = list(sys.stdin.readline().split()[0])
for j, temp in enumerate(line):
data[i][j] = int(temp)
living = []
danji = 0
togo = deque()
for i in range(x):
for j in range(y):
if data[i][j] == 1 and visit[i][j] == 0:
danji +=1
apart = 0
togo.append((i,j))
visit[i][j] = 1
while togo:
x_, y_ = togo.popleft()
apart += 1
for k in range(4):
x_move, y_move = x_ +dx[k], y_ + dy[k]
if x_move >=0 and y_move>=0 and x_move<x and y_move<y:
if data[x_move][y_move] == 1 and visit[x_move][y_move]==0:
visit[x_move][y_move] =1
togo.append((x_move, y_move))
living.append(apart)
living = sorted(living)
print(danji)
for l in living:
print(l)
|
cs |