๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Programming/Softeer

[Softeer][level3] ๋™๊ณ„ ํ…Œ์ŠคํŠธ ์‹œ์  ์˜ˆ์ธก (python)

728x90
๋ฐ˜์‘ํ˜•

https://softeer.ai/practice/info.do?idx=1&eid=411 

 

Softeer

์—ฐ์Šต๋ฌธ์ œ๋ฅผ ๋‹ด์„ Set์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”. ์ทจ์†Œ ํ™•์ธ

softeer.ai

 

๋ฌธ์ œ

ํ’€์ด

BFS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํƒ์ƒ‰

์ ์–ด๋„ 2๋ฒˆ ์ด์ƒ ์™ธ๋ถ€ ๊ณต๊ธฐ์™€ ์ ‘์ด‰ํ•œ ์–ผ์Œ์„ ๊ณ ๋ คํ•ด์•ผํ•˜๋ฏ€๋กœ ์–ผ์Œ์„ ๋งŒ๋‚ฌ์„ ๋•Œ countํ•ด์ฃผ๊ณ  2๋ฒˆ ์ด์ƒ count๋œ ๊ฒฝ์šฐ ์–ผ์Œ์„ ๋…น์ด๋Š” ๊ฒƒ์œผ๋กœ ํ•ด๊ฒฐ.

์–ผ์Œ์ด ์•„๋‹Œ๋ฐ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋˜ ๊ฒฝ์šฐ, ์ฃผ๋ณ€ ํƒ์ƒ‰์„ ์œ„ํ•ด queue์— ์ถ”๊ฐ€

 

์ฝ”๋“œ

import sys
from collections import deque

N, M = map(int, input().split())
grid = [list(map(int, sys.stdin.readline().split())) for _ in range(N)]

def BFS() :
    dx = [1, 0, -1, 0]
    dy = [0, -1, 0, 1]
    queue = deque()
    visited = [[0] * M for _ in range(N)]

    # ์ฒซ ๋ฒˆ์งธ ์‹œ์ž‘์ 
    queue.append([0,0])
    visited[0][0] = 1

    while queue :
        y, x = queue.popleft()

        for i in range(4) :
            nx = x + dx[i]
            ny = y + dy[i]
            if nx < 0 or nx >= M or ny < 0 or ny >= N :
                continue
            if grid[ny][nx] == 1 :      # ์–ผ์Œ์ธ ๊ฒฝ์šฐ
                visited[ny][nx] += 1
            elif visited[ny][nx] ==  0 :    # ์–ผ์Œ์ด ์•„๋‹ˆ๊ณ  ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ queue์— ์ถ”๊ฐ€
                queue.append([ny, nx])
                visited[ny][nx] = 1
    for i in range(N) :
        for j in range(M) :
            if visited[i][j] >= 2 :     # ์ ์–ด๋„ 2๋ณ€ ์ด์ƒ ์™ธ๋ถ€ ๊ณต๊ธฐ์™€ ์ ‘์ด‰ํ•œ ๊ฒฝ์šฐ
                grid[i][j] = 0          # ์–ผ์Œ ๋…น์Œ
    
time = 0
# ์–ผ์Œ ๋‹ค ๋…น์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
while True :
    if grid.count(grid[0]) == N :   # ์ข…๋ฃŒ ์กฐ๊ฑด
        break
    BFS()
    time += 1

print(time)
728x90
๋ฐ˜์‘ํ˜•