[๋ฐฑ์ค€-16236] ์•„๊ธฐ ์ƒ์–ด / Python

๐Ÿ“š Problem Solving/Baekjoon

 

16236๋ฒˆ: ์•„๊ธฐ ์ƒ์–ด

N×N ํฌ๊ธฐ์˜ ๊ณต๊ฐ„์— ๋ฌผ๊ณ ๊ธฐ M๋งˆ๋ฆฌ์™€ ์•„๊ธฐ ์ƒ์–ด 1๋งˆ๋ฆฌ๊ฐ€ ์žˆ๋‹ค. ๊ณต๊ฐ„์€ 1×1 ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜• ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค. ํ•œ ์นธ์—๋Š” ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์ตœ๋Œ€ 1๋งˆ๋ฆฌ ์กด์žฌํ•œ๋‹ค. ์•„๊ธฐ ์ƒ์–ด์™€ ๋ฌผ๊ณ ๊ธฐ๋Š” ๋ชจ๋‘ ํฌ๊ธฐ๋ฅผ ๊ฐ€

www.acmicpc.net

import sys
from collections import deque

input = sys.stdin.readline

n = int(input())
graph = []
for i in range(n):
    li = list(map(int, input().split()))
    graph.append(li)
    for j in range(n):
        if li[j] == 9:
            graph[i][j] = 2
            start = [i, j]

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


def bfs(i, j):
    visited = [[0] * n for _ in range(n)]
    visited[i][j] = 1
    distance = [[0] * n for _ in range(n)]
    eat = []
    queue = deque()
    queue.append((i, j))
    while queue:
        x, y = queue.popleft()
        for k in range(4):
            nx = x + dx[k]
            ny = y + dy[k]
            if 0 <= nx < n and 0 <= ny < n and visited[nx][ny] == 0:
                if graph[nx][ny] <= graph[i][j]:
                    visited[nx][ny] = 1
                    distance[nx][ny] = distance[x][y] + 1
                    queue.append((nx, ny))
                if graph[nx][ny] < graph[i][j] and graph[nx][ny] != 0:
                    eat.append((nx, ny, distance[nx][ny]))
    if not eat:
        return -1, -1, -1
    eat.sort(key=lambda x: (x[2], x[0], x[1]))
    return eat[0][0], eat[0][1], eat[0][2]


exp = 0
answer = 0
while True:
    i, j = start[0], start[1]
    ex, ey, dist = bfs(i, j)
    if ex == -1:
        break
    graph[ex][ey] = graph[i][j]
    graph[i][j] = 0
    start = [ex, ey]
    exp += 1
    if exp == graph[ex][ey]:
        exp = 0
        graph[ex][ey] += 1
    answer += dist

print(answer)

 

ํ•ด์„ค

bfs ๋ฌธ์ œ๋‹ค.

๋จน์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ์˜ ์œ„์น˜์™€ ๊ฑฐ๋ฆฌ๋ฅผ eat์— ์ €์žฅํ•œ๋‹ค.

lambda๋ฅผ ์‚ฌ์šฉํ•ด ๊ฑฐ๋ฆฌ, x, y๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

์ƒˆ๋กœ์šด ์‹œ์ž‘ ์œ„์น˜๋Š” ํ•ด๋‹น ์ธ๋ฑ์Šค์˜ x, y ๊ฐ’์ด๊ณ , ์•„๊ธฐ ์ƒ์–ด์˜ ์œ„์น˜๋ฅผ ์ƒˆ๋กœ์šด ์‹œ์ž‘ ์œ„์น˜๋กœ ์˜ฎ๊ธด๋‹ค. ์ด ๋•Œ, ๊ธฐ์กด ์•„๊ธฐ ์ƒ์–ด์˜ ์œ„์น˜๋Š” 0์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

์ƒˆ๋กœ์šด ์‹œ์ž‘ ์œ„์น˜(๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์—ˆ์„ ๋•Œ)๊ฐ€ ๊ฐฑ์‹ ๋  ๋•Œ๋งˆ๋‹ค exp๋ฅผ ํ•˜๋‚˜์”ฉ ๋Š˜๋ ค์ฃผ๋ฉฐ ์•„๊ธฐ ์ƒ์–ด์˜ ํฌ๊ธฐ์™€ ๋น„๊ตํ•œ๋‹ค.

์•„๊ธฐ ์ƒ์–ด์˜ ํฌ๊ธฐ์™€ exp๊ฐ€ ๊ฐ™๋‹ค๋ฉด exp๋Š” 0์œผ๋กœ, ์•„๊ธฐ ์ƒ์–ด์˜ ํฌ๊ธฐ๋Š” ๊ธฐ์กด์˜ ํฌ๊ธฐ์— 1์„ ๋”ํ•ด์ค€๋‹ค.

answer์— ๋ฆฌํ„ดํ•ด์ค€ ๋จน์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๋”ํ•ด์ค€๋‹ค.