[๋ฐฑ์ค€-2468] ์•ˆ์ „ ์˜์—ญ / Python

๐Ÿ“š Problem Solving/Baekjoon

 

2468๋ฒˆ: ์•ˆ์ „ ์˜์—ญ

์žฌ๋‚œ๋ฐฉ์žฌ์ฒญ์—์„œ๋Š” ๋งŽ์€ ๋น„๊ฐ€ ๋‚ด๋ฆฌ๋Š” ์žฅ๋งˆ์ฒ ์— ๋Œ€๋น„ํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์„ ๊ณ„ํšํ•˜๊ณ  ์žˆ๋‹ค. ๋จผ์ € ์–ด๋–ค ์ง€์—ญ์˜ ๋†’์ด ์ •๋ณด๋ฅผ ํŒŒ์•…ํ•œ๋‹ค. ๊ทธ ๋‹ค์Œ์— ๊ทธ ์ง€์—ญ์— ๋งŽ์€ ๋น„๊ฐ€ ๋‚ด๋ ธ์„ ๋•Œ ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š”

www.acmicpc.net

from collections import deque

n = int(input())
graph = [list(map(int, input().split())) for _ in range(n)]
maxCnt = 0

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


def bfs(x, y):
    queue = deque()
    queue.append([x, y])
    while queue:
        x, y = queue.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0 <= nx < n and 0 <= ny < n and temp[nx][ny] == 0:
                temp[nx][ny] = 1
                queue.append([nx, ny])


for i in range(101):
    temp = [[0] * n for i in range(n)]
    cnt = 0
    for j in range(n):
        for k in range(n):
            if graph[j][k] <= i:
                temp[j][k] = 1
    for j in range(n):
        for k in range(n):
            if temp[j][k] == 0:
                temp[j][k] = 1
                bfs(j, k)
                cnt += 1

    if cnt == 0:
        break
    maxCnt = max(maxCnt, cnt)

print(maxCnt)

 

ํ•ด์„ค

๋”ฑํžˆ ์–ด๋ ต์ง€ ์•Š์€ BFS ๋ฌธ์ œ์˜€๋‹ค. ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š” ์˜์—ญ์„ 0์œผ๋กœ ์„ค์ •ํ•˜๊ณ  BFS๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์˜์—ญ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋ฉด ๋œ๋‹ค.

๋ชจ๋“  ์˜์—ญ์ด ๋ฌผ์— ์ž ๊ธฐ๋Š” ๋†’์ด์—์„œ ํƒ์ƒ‰์„ ๋ฉˆ์ถฐ์ค€๋‹ค.