๋ฌธ์
N×N ํฌ๊ธฐ์ ๊ณต๊ฐ์ ๋ฌผ๊ณ ๊ธฐ M๋ง๋ฆฌ์ ์๊ธฐ ์์ด 1๋ง๋ฆฌ๊ฐ ์๋ค. ๊ณต๊ฐ์ 1×1 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ํ ์นธ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์ต๋ 1๋ง๋ฆฌ ์กด์ฌํ๋ค.
์๊ธฐ ์์ด์ ๋ฌผ๊ณ ๊ธฐ๋ ๋ชจ๋ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์ด ํฌ๊ธฐ๋ ์์ฐ์์ด๋ค. ๊ฐ์ฅ ์ฒ์์ ์๊ธฐ ์์ด์ ํฌ๊ธฐ๋ 2์ด๊ณ , ์๊ธฐ ์์ด๋ 1์ด์ ์ํ์ข์ฐ๋ก ์ธ์ ํ ํ ์นธ์ฉ ์ด๋ํ๋ค.
์๊ธฐ ์์ด๋ ์์ ์ ํฌ๊ธฐ๋ณด๋ค ํฐ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ ์ง๋๊ฐ ์ ์๊ณ , ๋๋จธ์ง ์นธ์ ๋ชจ๋ ์ง๋๊ฐ ์ ์๋ค. ์๊ธฐ ์์ด๋ ์์ ์ ํฌ๊ธฐ๋ณด๋ค ์์ ๋ฌผ๊ณ ๊ธฐ๋ง ๋จน์ ์ ์๋ค. ๋ฐ๋ผ์, ํฌ๊ธฐ๊ฐ ๊ฐ์ ๋ฌผ๊ณ ๊ธฐ๋ ๋จน์ ์ ์์ง๋ง, ๊ทธ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ ์ง๋๊ฐ ์ ์๋ค.
์๊ธฐ ์์ด๊ฐ ์ด๋๋ก ์ด๋ํ ์ง ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
- ๋ ์ด์ ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ๊ณต๊ฐ์ ์๋ค๋ฉด ์๊ธฐ ์์ด๋ ์๋ง ์์ด์๊ฒ ๋์์ ์์ฒญํ๋ค.
- ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ 1๋ง๋ฆฌ๋ผ๋ฉด, ๊ทธ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ผ๋ฌ ๊ฐ๋ค.
- ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ 1๋ง๋ฆฌ๋ณด๋ค ๋ง๋ค๋ฉด, ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ผ๋ฌ ๊ฐ๋ค.
- ๊ฑฐ๋ฆฌ๋ ์๊ธฐ ์์ด๊ฐ ์๋ ์นธ์์ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ผ๋ก ์ด๋ํ ๋, ์ง๋์ผํ๋ ์นธ์ ๊ฐ์์ ์ต์๊ฐ์ด๋ค.
- ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ๊น์ด ๋ฌผ๊ณ ๊ธฐ๊ฐ ๋ง๋ค๋ฉด, ๊ฐ์ฅ ์์ ์๋ ๋ฌผ๊ณ ๊ธฐ, ๊ทธ๋ฌํ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์ฌ๋ฌ๋ง๋ฆฌ๋ผ๋ฉด, ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋๋ค.
์๊ธฐ ์์ด์ ์ด๋์ 1์ด ๊ฑธ๋ฆฌ๊ณ , ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์๋ค๊ณ ๊ฐ์ ํ๋ค. ์ฆ, ์๊ธฐ ์์ด๊ฐ ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ผ๋ก ์ด๋ํ๋ค๋ฉด, ์ด๋๊ณผ ๋์์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋๋ค. ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ผ๋ฉด, ๊ทธ ์นธ์ ๋น ์นธ์ด ๋๋ค.
์๊ธฐ ์์ด๋ ์์ ์ ํฌ๊ธฐ์ ๊ฐ์ ์์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ ๋ ๋ง๋ค ํฌ๊ธฐ๊ฐ 1 ์ฆ๊ฐํ๋ค. ์๋ฅผ ๋ค์ด, ํฌ๊ธฐ๊ฐ 2์ธ ์๊ธฐ ์์ด๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ 2๋ง๋ฆฌ ๋จน์ผ๋ฉด ํฌ๊ธฐ๊ฐ 3์ด ๋๋ค.
๊ณต๊ฐ์ ์ํ๊ฐ ์ฃผ์ด์ก์ ๋, ์๊ธฐ ์์ด๊ฐ ๋ช ์ด ๋์ ์๋ง ์์ด์๊ฒ ๋์์ ์์ฒญํ์ง ์๊ณ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ก์๋จน์ ์ ์๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๊ณต๊ฐ์ ํฌ๊ธฐ N(2 ≤ N ≤ 20)์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ณต๊ฐ์ ์ํ๊ฐ ์ฃผ์ด์ง๋ค. ๊ณต๊ฐ์ ์ํ๋ 0, 1, 2, 3, 4, 5, 6, 9๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ์๋์ ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.
- 0: ๋น ์นธ
- 1, 2, 3, 4, 5, 6: ์นธ์ ์๋ ๋ฌผ๊ณ ๊ธฐ์ ํฌ๊ธฐ
- 9: ์๊ธฐ ์์ด์ ์์น
์๊ธฐ ์์ด๋ ๊ณต๊ฐ์ ํ ๋ง๋ฆฌ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์๊ธฐ ์์ด๊ฐ ์๋ง ์์ด์๊ฒ ๋์์ ์์ฒญํ์ง ์๊ณ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ก์๋จน์ ์ ์๋ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
https://www.acmicpc.net/problem/16236
๐ก ํ์ด ๋ฐ ์ฝ๋
from collections import deque
n = int(input())
graph = []
for _ in range(n):
graph.append(list(map(int, input().split())))
m = 0
for i in range(n):
for j in range(n):
if graph[i][j] == 9:
x, y = i, j
elif graph[i][j]:
m += 1
size = 2
dx, dy = [-1, 0, 0, 1], [0, -1, 1, 0]
def bfs(x, y, visited):
visited[x][y] = 1
queue = deque()
queue.append((x, y, 0))
temp = 0
selected = (n, n, -1)
while queue:
x, y, s = queue.popleft()
if temp != s and selected[-1] != -1:
return selected
for i in range(4):
nx, ny = x + dx[i], y + dy[i]
if nx < 0 or nx >= n or ny < 0 or ny >= n or visited[nx][ny] or graph[nx][ny] > size:
continue
if graph[nx][ny] and graph[nx][ny] < size:
selected = min(selected, (nx, ny, s+1))
visited[nx][ny] = 1
queue.append((nx, ny, s+1))
temp = s
return (-1, -1, -1)
result, count = 0, 0
graph[x][y] = 0
while 1:
visited = [[0]*n for _ in range(n)]
x, y, s = bfs(x, y, visited)
if s == -1:
break
graph[x][y] = 0
result += s
count += 1
if count == size:
size += 1
count = 0
print(result)
bfs๋ฅผ ํ์ฉํ์ฌ ์์ด์ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ๊น์ด์ ์๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ํ์ํ ํ ์ก์ ๋จน๋๋ค. ์ด๋, ๊ฐ์ ๊ฑฐ๋ฆฌ์ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์ฌ๋ฌ ๋ง๋ฆฌ์ผ ๋์ ์กฐ๊ฑด์ ์ ์ํด์ผ ํ๋ค. ์ฒ์์๋ ์, ์ข, ์ฐ, ํ ์์๋ก ํ์์ ํ๋ค๊ฐ ์ก์๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋ฐ๊ฒฌํ๋ ์ฆ์ ์ก์๋จน์๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ค. ํ์ง๋ง ์ด๋ ๊ฐ์ฅ ์์ ์๋ ๋ฌผ๊ณ ๊ธฐ, ๋ค์ ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์๋ฏธํ์ง ์์๋ค. ๋ฐ๋ผ์, ํ์ ์ค ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ์ขํ๋ฅผ ์ ์ฅํด๋์๋ค๊ฐ, ํ์ ๋ฒ์๋ฅผ ๋ํ๊ธฐ ์ง์ (x, y) ๊ฐ์ด ๊ฐ์ฅ ์์ ๋ฌผ๊ณ ๊ธฐ ์ขํ๋ฅผ ์ฑํํด์ ์ก์๋จน๋ ๋ฐฉ์์ผ๋ก ๋ค์ ๊ตฌํํ๋ค.
'Algorithm > ๐ Baekjoon Judge' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๋ฐฑ์ค 2294๋ฒ ๋์ 2 - ํ์ด์ฌ(Python) (0) | 2022.08.18 |
---|---|
[BOJ] ๋ฐฑ์ค 1890๋ฒ ์ ํ - ํ์ด์ฌ(Python) (0) | 2022.08.13 |
[BOJ] ๋ฐฑ์ค 2206๋ฒ ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ - ํ์ด์ฌ(Python) (0) | 2022.07.27 |
[BOJ] ๋ฐฑ์ค 12904๋ฒ A์ B - ํ์ด์ฌ(Python) (0) | 2022.07.06 |
[BOJ] ๋ฐฑ์ค 3109๋ฒ ๋นต์ง - ํ์ด์ฌ(Python) (0) | 2022.07.06 |