๐ฅ Silver2
https://www.acmicpc.net/problem/17086


โ ์ ๋ตํ์ด
import sys
from collections import deque
input = sys.stdin.readline
m, n = map(int, input().rstrip().split())
dx = [0, 1, 1, 1, 0, -1, -1, -1]
dy = [-1, -1, 0, 1, 1, 1, 0, -1]
def bfs():
result = 0
while queue:
cy, cx = queue.popleft()
for i in range(8):
ny, nx = dy[i] + cy, dx[i] + cx
# ์์ด๊ฐ ์๋ 0์ ๋ํด ์ด๋ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
if 0 <= ny < m and 0 <= nx < n and board[ny][nx] == 0:
board[ny][nx] = board[cy][cx] + 1
result = max(result, board[ny][nx])
queue.append((ny, nx))
return result
board = [list(map(int, input().strip().split())) for row in range(m)]
queue = deque()
# ์๊ธฐ์์ด๊ฐ ์์นํ ๊ณณ(1) ํ์ ๋ฃ๊ธฐ
for i in range(m):
for j in range(n):
if board[i][j] == 1:
queue.append((i, j))
result = bfs()
print(result - 1)
์ต๋จ๊ฑฐ๋ฆฌ ๋ฌธ์ ๋ฅผ ํ๋, ๋ฐฉ๋ฌธ์ฌ๋ถ๋ฅผ ์ํ ๋ฆฌ์คํธ๋ฅผ ๋ฐ๋ก ๋ง๋ค์๋๋ฐ ์ด๋ฒ์ board ์์ฒด์ ์ด๋๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ๋ ์์ผ๋ก ํ์ดํ์๋ค.
์ฌํ ์ถ๋ฐ์ ์ด๋ ํ๊ฒ ๋์ฐฉ์ ์ด ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ๋ง ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ค๊ฐ, ์ถ๋ฐ์ ์ด ์ ํด์ ธ์์ง ์๊ณ ์์ด(1)์ด ์กด์ฌํ๋ ๊ณณ๋ค์ ๊ฑฐ๋ฆฌ๋ค์ ๋ํด ๊ฐ์ฅ ๊ธด ๊ฑฐ๋ฆฌ๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ์๋ค.
1์ด ์์นํ ๊ณณ์ ๋ํ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์, ํ์ ์์ด๊ฐ ์์นํ ์ขํ๋ฅผ ๋ฃ์ด์ฃผ์๊ณ , ๊ฐ ๋ณด๋ ์นธ์๋ ๊ฐ์ฅ ๊ฐ๊น์ด ์์ด ์์น๋ฅผ ๋๋ฌํ๊ธฐ ์ํ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๋ด๋๋ค.



๋จผ์ ํ์ ๋ฃ์ ์๊ธฐ์์ด์ ์ขํ๊ฐ์ ๊บผ๋ด ๊ทธ ์ขํ ๊ฐ์ ๊ธฐ์ค์ผ๋ก 8๋ฐฉํฅ์ผ๋ก ์ํํ๋ฉด์ ๋ฐฉ๋ฌธํ์ ์๋ 0์ธ๊ฐ์ 1์ ๋ํด ์ด๋๊ฑฐ๋ฆฌ๋ฅผ ์ ๋ฐ์ดํธํด์ค๋ค. ๊ทธ๋ผ ๊ทธ๋ฆผ๊ณผ ๊ฐ์๊ฒ์ด๋ค. 8๋ฐฉํฅ์ผ๋ก ์ํ๋ฅผ ํ๋ฉด์ board๊ฐ์ ์ด๋๊ฑฐ๋ฆฌ๋ก ์ ๋ฐ์ดํธํด์ฃผ๊ณ , ์ขํ๋ฅผ ํ์ ๋ฃ์ด์ค์ผ๋ก์จ ์๊ธฐ์์ด๊ฐ ๋ชจ๋ ํ์์ ๋์ค๋ฉด ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ์ํ์์, ํ์ ๋ฃ์ด๋ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋ 1์ ๋ํด์ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ 0์ ์ขํ๋ค์ ์ฑ์๋๊ฐ๋ ๋ฐฉ์์ด๋ค.
โ๏ธ์์ด์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด์ board๊ฐ(๊ฑฐ๋ฆฌ)๋ 0์ด ์๋ 1์ ๊ธฐ์ค์ผ๋ก ์ด๋๊ฑฐ๋ฆฌ๋ฅผ ๋ด์๊ธฐ ๋๋ฌธ์, ๊ฑฐ๋ฆฌ-1์ ํด์ค์ผ ๋ต์ ๊ตฌํ ์์๋ค.
'๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค-Python] ์ต๋จ๊ฒฝ๋ก : 1753๋ฒ (๋ค์ต์คํธ๋ผ ์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ) (1) | 2024.06.14 |
---|---|
[๋ฐฑ์ค-Python] ๊ฑฐ๋ถ์ด : 8911๋ฒ (1) | 2024.06.13 |
[๋ฐฑ์ค-Python] ํน : 1063๋ฒ (1) | 2024.06.12 |
[๋ฐฑ์ค-Python] ๋จ์ด ๋๋๊ธฐ : 1251๋ฒ (0) | 2024.06.12 |
[๋ฐฑ์ค-Python] ์ข์์ํธ : 2061๋ฒ (1) | 2024.06.12 |
๐ฅ Silver2
https://www.acmicpc.net/problem/17086


โ ์ ๋ตํ์ด
import sys
from collections import deque
input = sys.stdin.readline
m, n = map(int, input().rstrip().split())
dx = [0, 1, 1, 1, 0, -1, -1, -1]
dy = [-1, -1, 0, 1, 1, 1, 0, -1]
def bfs():
result = 0
while queue:
cy, cx = queue.popleft()
for i in range(8):
ny, nx = dy[i] + cy, dx[i] + cx
# ์์ด๊ฐ ์๋ 0์ ๋ํด ์ด๋ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
if 0 <= ny < m and 0 <= nx < n and board[ny][nx] == 0:
board[ny][nx] = board[cy][cx] + 1
result = max(result, board[ny][nx])
queue.append((ny, nx))
return result
board = [list(map(int, input().strip().split())) for row in range(m)]
queue = deque()
# ์๊ธฐ์์ด๊ฐ ์์นํ ๊ณณ(1) ํ์ ๋ฃ๊ธฐ
for i in range(m):
for j in range(n):
if board[i][j] == 1:
queue.append((i, j))
result = bfs()
print(result - 1)
์ต๋จ๊ฑฐ๋ฆฌ ๋ฌธ์ ๋ฅผ ํ๋, ๋ฐฉ๋ฌธ์ฌ๋ถ๋ฅผ ์ํ ๋ฆฌ์คํธ๋ฅผ ๋ฐ๋ก ๋ง๋ค์๋๋ฐ ์ด๋ฒ์ board ์์ฒด์ ์ด๋๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ๋ ์์ผ๋ก ํ์ดํ์๋ค.
์ฌํ ์ถ๋ฐ์ ์ด๋ ํ๊ฒ ๋์ฐฉ์ ์ด ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ๋ง ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ค๊ฐ, ์ถ๋ฐ์ ์ด ์ ํด์ ธ์์ง ์๊ณ ์์ด(1)์ด ์กด์ฌํ๋ ๊ณณ๋ค์ ๊ฑฐ๋ฆฌ๋ค์ ๋ํด ๊ฐ์ฅ ๊ธด ๊ฑฐ๋ฆฌ๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ์๋ค.
1์ด ์์นํ ๊ณณ์ ๋ํ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์, ํ์ ์์ด๊ฐ ์์นํ ์ขํ๋ฅผ ๋ฃ์ด์ฃผ์๊ณ , ๊ฐ ๋ณด๋ ์นธ์๋ ๊ฐ์ฅ ๊ฐ๊น์ด ์์ด ์์น๋ฅผ ๋๋ฌํ๊ธฐ ์ํ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๋ด๋๋ค.



๋จผ์ ํ์ ๋ฃ์ ์๊ธฐ์์ด์ ์ขํ๊ฐ์ ๊บผ๋ด ๊ทธ ์ขํ ๊ฐ์ ๊ธฐ์ค์ผ๋ก 8๋ฐฉํฅ์ผ๋ก ์ํํ๋ฉด์ ๋ฐฉ๋ฌธํ์ ์๋ 0์ธ๊ฐ์ 1์ ๋ํด ์ด๋๊ฑฐ๋ฆฌ๋ฅผ ์ ๋ฐ์ดํธํด์ค๋ค. ๊ทธ๋ผ ๊ทธ๋ฆผ๊ณผ ๊ฐ์๊ฒ์ด๋ค. 8๋ฐฉํฅ์ผ๋ก ์ํ๋ฅผ ํ๋ฉด์ board๊ฐ์ ์ด๋๊ฑฐ๋ฆฌ๋ก ์ ๋ฐ์ดํธํด์ฃผ๊ณ , ์ขํ๋ฅผ ํ์ ๋ฃ์ด์ค์ผ๋ก์จ ์๊ธฐ์์ด๊ฐ ๋ชจ๋ ํ์์ ๋์ค๋ฉด ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ์ํ์์, ํ์ ๋ฃ์ด๋ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋ 1์ ๋ํด์ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ 0์ ์ขํ๋ค์ ์ฑ์๋๊ฐ๋ ๋ฐฉ์์ด๋ค.
โ๏ธ์์ด์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด์ board๊ฐ(๊ฑฐ๋ฆฌ)๋ 0์ด ์๋ 1์ ๊ธฐ์ค์ผ๋ก ์ด๋๊ฑฐ๋ฆฌ๋ฅผ ๋ด์๊ธฐ ๋๋ฌธ์, ๊ฑฐ๋ฆฌ-1์ ํด์ค์ผ ๋ต์ ๊ตฌํ ์์๋ค.
'๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค-Python] ์ต๋จ๊ฒฝ๋ก : 1753๋ฒ (๋ค์ต์คํธ๋ผ ์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ) (1) | 2024.06.14 |
---|---|
[๋ฐฑ์ค-Python] ๊ฑฐ๋ถ์ด : 8911๋ฒ (1) | 2024.06.13 |
[๋ฐฑ์ค-Python] ํน : 1063๋ฒ (1) | 2024.06.12 |
[๋ฐฑ์ค-Python] ๋จ์ด ๋๋๊ธฐ : 1251๋ฒ (0) | 2024.06.12 |
[๋ฐฑ์ค-Python] ์ข์์ํธ : 2061๋ฒ (1) | 2024.06.12 |