ebson

boj.kr/1926 그림 (silver1) 파이썬 풀이 본문

ALGORITHM STUDY WITH PYTHON/BFS | DFS

boj.kr/1926 그림 (silver1) 파이썬 풀이

ebson 2023. 5. 4. 13:26

1. 도화지의 모든 좌표를 순회하면서 아래를 반복

1.1. 체크되지 않은 좌표이고 좌표 값이 1이면, 합계 리스트에 해당 좌표를 인자로 아래와 같이 bfs한 결과를 저장

1.1.1. deque에 인자로 받은 좌표값을 저장

1.1.2. tot을 1로 초기화

1.1.3. 체크배열의 해당 좌표값을 1로 갱신

1.1.4. dq가 빌 때까지 반복

1.1.4.1. 상하좌우 좌표에 대해 도화지에 존재하는 좌표이고, 좌표값이 1이고, 체크배열의 값이 0이면, dq에 추가하고 chk배열의 값을 1로 갱신하고 tot을 1 증감

1.1.5. tot 값을 반환

2. tot_list의 길이를 출력

3. tot_list의 길이가 0보다 크면 최대값을 출력하고 0이면 0을 출력

 

N, M = map(int, input().split())
adj = [list(map(int, input().split())) for _ in range(N)]

dy = [-1, 1, 0, 0]
dx = [0, 0, -1, 1]

from collections import deque

def bfs(y, x):
    dq = deque()
    dq.append((y, x))
    chk[y][x] = 1
    tot = 1
    while dq:
        (cy, cx) = dq.popleft()
        for i in range(4):
            ny = cy + dy[i]
            nx = cx + dx[i]
            if 0<=ny<N and 0<=nx<M and adj[ny][nx] == 1 and chk[ny][nx] == 0:
                dq.append((ny, nx))
                chk[ny][nx] = 1
                tot += 1
    return tot

chk = [[0 for _ in range(M)] for _ in range(N)]
tot_list = []
for y in range(N):
    for x in range(M):
        if chk[y][x] == 0 and adj[y][x] == 1:
            tot_list.append(bfs(y, x))

print(len(tot_list))
print(max(tot_list) if len(tot_list) > 0 else 0)

 

bfs , dfs 방식 모두 가능하다.

Comments