[๋ฐฑ์ค€] ๋น™์‚ฐ

[๋ฐฑ์ค€] ๋น™์‚ฐ


ํ’€์ด

๋ฌธ์ œ์˜ ์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๋งค๋…„ ๋น™์‚ฐ์˜ ๋™์„œ๋‚จ๋ถ์˜ 0์˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ์นธ์— ์žˆ๋Š” ๋น™์‚ฐ์ด ๋‹ค์Œ ๋…„๋„์— ๋…น๋Š”๋‹ค๋Š” ๊ฒƒ.

  2. ๋น™์‚ฐ์ด 0 ์ผ ๊ฒฝ์šฐ, year = 0์œผ๋กœ ์ถœ๋ ฅ

  3. ๋น™์‚ฐ์ด ๋‘ ๋ฉ์ด ์ด์ƒ์ผ ๊ฒฝ์šฐ, ๊ทธ ๋•Œ์˜ ๋…„๋„ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ.

์œ„์™€ ๊ฐ™์€ ์กฐ๊ฑด์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด์„œ,
๋จผ์ € bfs๋ฅผ ์ด์šฉํ•ด ๋น™์‚ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์—ˆ๋‹ค. ๋น™์‚ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋ฉด์„œ ์ฃผ๋ณ€์˜ 0์˜ ๊ฐœ์ˆ˜๋ฅผ ๋”ฐ๋กœ ๋ฐ›์•„ ๋‹ค๋ฅธ ์ด์ฐจ์› ๋ฆฌ์ŠคํŠธ์— ๋„ฃ์—ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋น™์‚ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ 2๊ฐœ ์ด์ƒ์ด๋ฉด, while๋ฌธ์„ ๋๋‚ด๋„๋ก ํ•˜๊ณ ,
๋น™์‚ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ 0๊ฐœ๋ผ๋ฉด, ๋‹ค ๋…น์•˜๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ ์กฐ๊ฑด์— ๋”ฐ๋ผ, year=0์œผ๋กœ ์ถœ๋ ฅํ–ˆ๋‹ค.
์œ„ ๋‘ ์กฐ๊ฑด์ด ์•„๋‹ˆ๋ผ๋ฉด, 1๋…„์„ ๋”ํ•ด์ฃผ๊ณ  ํ˜„์žฌ ๋น™์‚ฐ ์ขŒํ‘œ์™€ bfs์—์„œ ์ €์žฅํ•œ ์ด์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ ๋นผ์ฃผ์–ด, ๋น™์‚ฐ์„ ๋…น์˜€๋‹ค.
๊ทธ๋ฆฌ๊ณ  while๋ฌธ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ–ˆ๋‹ค.

n, m = map(int, input().split())
graph = [list(map(int, input().split())) for _ in range(n)]
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
year, bing = 0, 0

def bfs(x, y, visit):
    q = [[x,y]]
    while q:
        x, y = q[0]
        q = q[1:]
        for i in range(4):
            mx = x + dx[i]
            my = y + dy[i]
            if 0<=mx<n and 0<=my<m:
                if graph[mx][my] == 0:
                    graph_2[x][y] += 1
                elif visit[mx][my] == False:
                    visit[mx][my] = True
                    q.append([mx, my])

def year_graph(graph, graph_2):
    for i in range(n):
        for j in range(m):
            graph[i][j] = graph[i][j] - graph_2[i][j]
            if graph[i][j] < 0:
                graph[i][j] = 0

while bing==0:
    visit = [[False] * m for _ in range(n)]
    graph_2 = [[0]*m for _ in range(n)]
    for i in range(n):
        for j in range(m):
            if graph[i][j] > 0 and visit[i][j] == False:
                visit[i][j] = True
                bfs(i, j, visit)
                bing += 1

    if bing >= 2:
        break
    elif bing == 0:  # ์‹ค์ˆ˜ํ•œ ๋ถ€๋ถ„
        year = 0
        break
    else:
        year += 1
        year_graph(graph, graph_2)
        bing = 0
print(year)



์‹ค์ˆ˜ ๋ฐ ๋ฐฐ์šด ์ 

  • ๊ฐ€์žฅ ๋จผ์ € ์‹ค์ˆ˜ํ–ˆ๋˜ ์ ์€, dfs๋ฅผ ์ด์šฉํ•ด์„œ ๋น™์‚ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ–ˆ๋˜ ์ ์ด๋‹ค.
    ๊ณ„์† Recursion Error ๊ฐ€ ๋– ์„œ ์ด์œ ๋ฅผ ์ฐพ์•„๋ณด๋‹ˆ, ์žฌ๊ท€ ๊ด€๋ จ ์—๋Ÿฌ์˜€๊ณ  Python์—์„œ ์ •ํ•œ ์ตœ๋Œ€ ๊นŠ์ด๋ณด๋‹ค
    ์žฌ๊ท€์˜ ๊นŠ์ด๊ฐ€ ๋” ๊นŠ์–ด์กŒ์„ ๋•Œ ์ƒ๊ธฐ๋Š” ์—๋Ÿฌ๋‹ค. BOJ์—์„œ๋Š” n=1000์ผ ๋•Œ๊ฐ€ ์ตœ๋Œ€์˜€๋‹ค.
    ์—ฌ๊ธฐ์„œ๋Š” ์นธ์˜ ๊ฐœ์ˆ˜๊ฐ€ 10,000 ์ด๊ธฐ ๋•Œ๋ฌธ์— ์—๋Ÿฌ๊ฐ€ ์ƒ๊ธด ๊ฒƒ ๊ฐ™๋‹ค.

  • bfs๋กœ ๋ฐ”๊ฟ”์„œ ํ–ˆ๋˜ ๋˜ ๋‹ค๋ฅธ ์‹ค์ˆ˜๋Š” ๋น™์‚ฐ์„ bfs๋Œ๋ฆฌ๋ฉด์„œ ๊ฐ™์ด ๋…น์˜€๋˜ ์ ์ด๋‹ค. 0์˜ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•˜๊ณ  ๋ฐ”๋กœ ๋…น์ธ๋‹ค๋ฉด,
    ๋‹ค์Œ ๋น™์‚ฐ ์นธ ์ˆ˜์—์„œ ์ด์ „ 0์˜ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•  ๋•Œ, ์ž˜๋ชป ์…€ ์ˆ˜ ๋ฐ–์— ์—†๊ฒŒ ๋œ๋‹ค.

  • ๋น™์‚ฐ์ด 0์ผ ๋•Œ, year ๊ฐ’์„ 0์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ ๋˜ํ•œ, ์กฐ๊ฑด์„ ์ œ๋Œ€๋กœ ํ™•์ธํ•˜์ง€ ๋ชปํ•ด์„œ ์‹ค์ˆ˜๊ฐ€ ์ƒ๊ฒผ๋‹ค.

ํƒœ๊ทธ: , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: