[BOJ] 1520. ๋‚ด๋ฆฌ๋ง‰ ๊ธธ (๐Ÿฅ‡, DP)

lemythe423ยท2023๋…„ 9์›” 12์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
45/133
post-thumbnail

๐Ÿ”—

ํ’€์ด

ํ•ญ์ƒ (0, 0)์—์„œ ์‹œ์ž‘ํ•ด์„œ (M-1, N-1)๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋™ํ•  ๋•Œ ๋„์ค‘์— ๋›ฐ์–ด๋„˜๊ฑฐ๋‚˜ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ๋ชจ๋“  ๊ธธ์€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค. A์—์„œ A์™€ ์ธ์ ‘ํ•œ ๊ณณ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ์ผ๋‹จ A๊นŒ์ง€ ๊ฐ€๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜์— ์ถ”๊ฐ€์ ์œผ๋กœ ๋”ํ•ด์ง€๋Š” ๊ฒƒ์ด๋‹ค. ํŠน์ • ์œ„์น˜์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ณ„์† ๋ˆ„์ ํ•ด์„œ ๊ตฌํ•˜๋Š” ๊ฒƒ, ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค

2์ฐจ์› ๋ฐฐ์—ด์—์„œ dp๋ฅผ ๊ตฌํ˜„ํ•  ๋• ์–ด๋–ค ๋ฐฉํ–ฅ์œผ๋กœ ์ง„ํ–‰ํ•  ๊ฒƒ์ด๋ƒ๊ฐ€ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š”๋ฐ, ์ด ๋ฌธ์ œ์—์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์ž‘์€ ์ˆซ์ž๊ฐ€ ์žˆ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ํžŒํŠธ๊ฐ€ ์žˆ๋‹ค. ํ•ญ์ƒ ์™ผ์ชฝ ์œ„์—์„œ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜๊ณ , ์–ด๋–ค ๊ฐ’์„ ์ง€๋‚˜๊ฐ€๋„ ๊ทธ ๊ฐ’๋ณด๋‹ค ๋” ํฐ ๊ฐ’์œผ๋กœ๋Š” ์ด๋™ํ•  ์ˆ˜ ์—†๋‹ค. ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ˜๋“œ์‹œ ๋” ์ž‘์€ ๊ฐ’์œผ๋กœ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค. ์ƒํ•˜์ขŒ์šฐ๋กœ ๋ชจ๋‘ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ž‘์€ ํ–‰์—์„œ ๋” ํฐ ํ–‰์œผ๋กœ ์ด๋™ํ•˜๊ฑฐ๋‚˜ ํ•˜๋Š” ์œ„์น˜ ๋ฐฉ์‹์œผ๋กœ๋Š” ์–ด๋ ต๋‹ค. ๋งŒ์•ฝ ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ์œ„์ชฝ ์นธ์— ๋” ์ž‘์€ ๊ฐ’์ด ์žˆ์—ˆ๋˜ ๊ฒฝ์šฐ๋Š” ์ œ๋Œ€๋กœ ๋œ dp๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ธฐ ์–ด๋ ต๋‹ค. dp๋Š” ์ด์ „์— ๊ตฌํ•œ ๊ฐ’์ด ํ™•์‹คํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ๊ทธ ๊ฐ’์„ ๊ฐ–๊ณ  ๋‹ค์Œ ๊ฐ’์œผ๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•˜์ง€๋งŒ ๋ฌด์กฐ๊ฑด ์ž‘์€ ๊ฐ’์œผ๋กœ๋งŒ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์กฐ๊ฑด์ด ๋ถ™๋Š”๋‹ค๋ฉด, ํ•ญ์ƒ ๋ชจ๋“  ์ด๋™์€ ๋” ํฐ ๊ฐ’์—์„œ ๋” ์ž‘์€ ๊ฐ’์œผ๋กœ ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋˜๊ณ , ๊ณ„์†ํ•ด์„œ ๋” ํฐ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ์นธ๋“ค์— ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ฃผ๋ฉด์„œ ์ด๋™์„ ์‹œํ‚ค๋ฉด ๊ฐ ์นธ์— ๋Œ€ํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ œ๋Œ€๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋” ํฐ ์ˆซ์ž๋ฅผ ๊ฐ€์ง€๋Š” ์นธ๋ถ€ํ„ฐ ์ฐพ๊ฒŒ ๋˜๋ฉด ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ๋˜ ์นธ์„ ์žฌ๋ฐฉ๋ฌธํ•˜์ง„ ์•Š์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.(ํ•ญ์ƒ ๋” ์ž‘์€ ๊ฐ’์œผ๋กœ๋งŒ ๊ฐ€๋‹ˆ๊นŒ)

๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” 500x500์œผ๋กœ ์ด 25๋งŒ์นธ์ด๊ณ  ๋งค๋ฒˆ ์ตœ๋Œ€๊ฐ’์„ ์ฐพ๋Š” ๋ฐฉ์‹์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด ์‹œ๊ฐ„์ด ๊ฝค ์˜ค๋ž˜ ๊ฑธ๋ฆด ๊ฒƒ ๊ฐ™์•„์„œ ์ตœ๋Œ€ํž™์„ ์‚ฌ์šฉํ•œ ์šฐ์„ ์ˆœ์œ„ํ๋ฅผ ์จ์„œ ๊ตฌํ˜„ํ–ˆ๋‹ค.

# ๋‚ด๋ฆฌ๋ง‰ ๊ธธ

from heapq import heappop, heappush

m, n = map(int, input().split())
MAP = [list(map(int, input().split())) for _ in range(m)]
dp = [[0]*n for _ in range(m)]
start = MAP[0][0]

dp[0][0] = 1
pq = [(-start, 0, 0)]
dx, dy = (-1, 0, 1, 0), (0, 1, 0, -1)
while pq:
    num, x, y = heappop(pq)
    if MAP[x][y] == start+1:
        continue

    for i in range(4):
        nx, ny = x+dx[i], y+dy[i]
        if not(-1<nx<m and -1<ny<n) or MAP[nx][ny] >= -num:
            continue
        dp[nx][ny] += dp[x][y]
        heappush(pq, ((-MAP[nx][ny], nx, ny)))
    MAP[x][y] = start+1

print(dp[m-1][n-1])
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€