๐ŸŒฑ → ๐ŸŒณ

[Baekjoon] 1926. ๊ทธ๋ฆผ - python ๋ณธ๋ฌธ

Algorithms

[Baekjoon] 1926. ๊ทธ๋ฆผ - python

BAY 2023. 10. 3. 10:01
728x90

https://www.acmicpc.net/problem/1926

 

1926๋ฒˆ: ๊ทธ๋ฆผ

์–ด๋–ค ํฐ ๋„ํ™”์ง€์— ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ ธ ์žˆ์„ ๋•Œ, ๊ทธ ๊ทธ๋ฆผ์˜ ๊ฐœ์ˆ˜์™€, ๊ทธ ๊ทธ๋ฆผ ์ค‘ ๋„“์ด๊ฐ€ ๊ฐ€์žฅ ๋„“์€ ๊ฒƒ์˜ ๋„“์ด๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ๋ผ. ๋‹จ, ๊ทธ๋ฆผ์ด๋ผ๋Š” ๊ฒƒ์€ 1๋กœ ์—ฐ๊ฒฐ๋œ ๊ฒƒ์„ ํ•œ ๊ทธ๋ฆผ์ด๋ผ๊ณ  ์ •์˜ํ•˜์ž. ๊ฐ€๋กœ๋‚˜ ์„ธ๋กœ

www.acmicpc.net

๋ฌธ์ œ ์ •๋ณด

๋ฌธ์ œ ์œ ํ˜• ๋‚œ์ด๋„ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„ ํ•ด๊ฒฐ ์œ ๋ฌด ์Šค์Šค๋กœ ๊ตฌํ˜„ ์„ฑ๊ณต
BFS ์‹ค๋ฒ„1 45m O O

์„ค๊ณ„ ๋ฐฉ๋ฒ•

BFS

์ฝ”๋“œ

import sys
from collections import deque
input = sys.stdin.readline

n, m = map(int, input().split())
graph = []
for i in range(n):
    graph.append(list(map(int, input().split())))

arr = []
visited = [[0]*m for _ in range(n)]

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

def bfs(i,j):
    q = deque()
    q.append((i,j))
    visited[i][j] = 1
    cnt = 0
    while q:
        x, y = q.popleft()
        # q์—์„œ popleftํ•  ๋•Œ๋งˆ๋‹ค cntํ•˜๋ฉด, ๋„“์ด ๊ตฌํ•  ์ˆ˜ ์žˆ์Œ 
        cnt += 1
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if (nx < 0 or nx >= n or ny<0 or ny >= m): continue
            if visited[nx][ny] == 0 and graph[nx][ny] == 1:
                visited[nx][ny] = 1
                q.append((nx, ny))
    return cnt

for i in range(n):
    for j in range(m):
        # graph[i][j] == 1 ์ด๋ฉด์„œ, ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์นธ์—์„œ๋งŒ bfs ์‹คํ–‰
        if graph[i][j] == 1 and visited[i][j] == 0:
            arr.append(bfs(i,j))

print(len(arr))
# len(arr) == 0์ด๋ฉด "ValueError: max() arg is an empty sequence" ๋ฐœ์ƒ
if len(arr) == 0:
    print(0)
else:
    print(max(arr))

์‹œ๊ฐ„ ๋ณต์žก๋„

O(N)

์–ด๋ ค์› ๋˜ ์ 

  1. https://www.acmicpc.net/problem/2178 ์ด ๋ฌธ์ œ์™€ ๊ฐ™์ด ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์—์„œ๋Š” graph[nx][ny] = graph[x][y] + 1ํ•ด์ฃผ๋ฉด ๋˜๋Š”๋ฐ ๋„“์ด๋ฅผ ๊ตฌํ•  ๋•Œ๋Š” q์—์„œ pop์„ ํ•œ ๋งŒํผ ๋”ํ•ด์ฃผ์–ด์•ผ ํ•จ
  2. len(arr) == 0์ด๋ฉด max(arr)์‹œ "ValueError: max() arg is an empty sequence" ๋ฐœ์ƒ
728x90