* DFS 가 BFS 보다 편한지 정답코드 DFS가 많았다.
BFS 로 풀었고,
완전히 내것으로 만드는데는 아직..
그래도 신박했던 부분은,
이 부분.
만들어 놓은 graph를 모두 방문해주되, 1이 있는 graph의 좌표의 경우에만 bfs 를 실행해준다.
그게 코드로,
for i in range(N):
for j in range(N):
if graph[i][j] == 1:
cnt.append(bfs(i,j)) # bfs 에서 1인 해당 좌표를 탐색해줘!
아래는 bfs로 푼 전체 코드이다.
from collections import deque
import sys
input=sys.stdin.readline
def bfs(a,b):
cnt=1
q=deque()
q.append((a,b))
graph[a][b] = 0
dx=[-1,1,0,0]
dy=[0,0,-1,1]
while q:
x,y=q.popleft()
for i in range(4):
nx=x+dx[i]
ny=y+dy[i]
if nx<0 or nx>=N or ny<0 or ny>=N:
continue
if graph[nx][ny]==1:
q.append((nx,ny))
graph[nx][ny]=0
cnt+=1
return cnt
N=int(input())
cnt=[]
graph=[]
for i in range(N):
graph.append(list(map(int, input().rstrip()))) # 단지 설정
for i in range(N):
for j in range(N):
if graph[i][j]==1:
cnt.append(bfs(i,j)) # 모든 그래프를 모두 방문해주되, 1이 있으면 bfs실행
print(len(cnt))
cnt.sort()
for i in range(len(cnt)):
print(cnt[i])
'2023-4 > 1일1코딩' 카테고리의 다른 글
[이코테] 왕실의 나이트 (0) | 2023.01.18 |
---|---|
[이코테] 숫자 카드 게임 (0) | 2023.01.18 |
[BOJ] 1764 python (0) | 2023.01.11 |
[BOJ] 1260 python (0) | 2023.01.06 |