์•Œ๊ณ ๋ฆฌ์ฆ˜/DP

[๋ฐฑ์ค€ 1890 ๐Ÿฅˆ] ์ ํ”„

1eehyunji 2023. 11. 4. 01:13

https://www.acmicpc.net/problem/1890

 

1890๋ฒˆ: ์ ํ”„

์ฒซ์งธ ์ค„์— ๊ฒŒ์ž„ ํŒ์˜ ํฌ๊ธฐ N (4 ≤ N ≤ 100)์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ๋‹ค์Œ N๊ฐœ ์ค„์—๋Š” ๊ฐ ์นธ์— ์ ํ˜€์ ธ ์žˆ๋Š” ์ˆ˜๊ฐ€ N๊ฐœ์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์นธ์— ์ ํ˜€์žˆ๋Š” ์ˆ˜๋Š” 0๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 9๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜์ด๋ฉฐ, ๊ฐ€์žฅ

www.acmicpc.net

๋ฌธ์ œ

N×N ๊ฒŒ์ž„ํŒ์— ์ˆ˜๊ฐ€ ์ ํ˜€์ ธ ์žˆ๋‹ค. ์ด ๊ฒŒ์ž„์˜ ๋ชฉํ‘œ๋Š” ๊ฐ€์žฅ ์™ผ์ชฝ ์œ„ ์นธ์—์„œ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์นธ์œผ๋กœ ๊ทœ์น™์— ๋งž๊ฒŒ ์ ํ”„๋ฅผ ํ•ด์„œ ๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค.

๊ฐ ์นธ์— ์ ํ˜€์žˆ๋Š” ์ˆ˜๋Š” ํ˜„์žฌ ์นธ์—์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ฆฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋ฐ˜๋“œ์‹œ ์˜ค๋ฅธ์ชฝ์ด๋‚˜ ์•„๋ž˜์ชฝ์œผ๋กœ๋งŒ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค. 0์€ ๋” ์ด์ƒ ์ง„ํ–‰์„ ๋ง‰๋Š” ์ข…์ฐฉ์ ์ด๋ฉฐ, ํ•ญ์ƒ ํ˜„์žฌ ์นธ์— ์ ํ˜€์žˆ๋Š” ์ˆ˜๋งŒํผ ์˜ค๋ฅธ์ชฝ์ด๋‚˜ ์•„๋ž˜๋กœ ๊ฐ€์•ผ ํ•œ๋‹ค. ํ•œ ๋ฒˆ ์ ํ”„๋ฅผ ํ•  ๋•Œ, ๋ฐฉํ–ฅ์„ ๋ฐ”๊พธ๋ฉด ์•ˆ ๋œ๋‹ค. ์ฆ‰, ํ•œ ์นธ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ ํ”„๋ฅผ ํ•˜๊ฑฐ๋‚˜, ์•„๋ž˜๋กœ ์ ํ”„๋ฅผ ํ•˜๋Š” ๋‘ ๊ฒฝ์šฐ๋งŒ ์กด์žฌํ•œ๋‹ค.

๊ฐ€์žฅ ์™ผ์ชฝ ์œ„ ์นธ์—์„œ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์นธ์œผ๋กœ ๊ทœ์น™์— ๋งž๊ฒŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๊ฒŒ์ž„ ํŒ์˜ ํฌ๊ธฐ N (4 ≤ N ≤ 100)์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ๋‹ค์Œ N๊ฐœ ์ค„์—๋Š” ๊ฐ ์นธ์— ์ ํ˜€์ ธ ์žˆ๋Š” ์ˆ˜๊ฐ€ N๊ฐœ์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์นธ์— ์ ํ˜€์žˆ๋Š” ์ˆ˜๋Š” 0๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 9๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜์ด๋ฉฐ, ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์นธ์—๋Š” ํ•ญ์ƒ 0์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

๊ฐ€์žฅ ์™ผ์ชฝ ์œ„ ์นธ์—์„œ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์นธ์œผ๋กœ ๋ฌธ์ œ์˜ ๊ทœ์น™์— ๋งž๊ฒŒ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๊ฒฝ๋กœ์˜ ๊ฐœ์ˆ˜๋Š” 2^63-1๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.

 

๋ฌธ์ œ ํ’€์ด

  • ๋งจ ์ƒ๋‹จ ์™ผ์ชฝ๋ถ€ํ„ฐ ํ•˜๋‹จ ์˜ค๋ฅธ์ชฝ๊นŒ์ง€ ์ด๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, for๋ฌธ ํƒ์ƒ‰์„ ํ†ตํ•ด [0][0] ์œ„์น˜์—์„œ ์‹œ์ž‘ํ•ด์„œ [n-1][n-1]์— ๋„๋‹ฌํ•ด์„œ ์ ํ”„๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ํƒ์ƒ‰ํ•œ๋‹ค.
  • ์—ฌ๊ธฐ์„œ, DP๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ ์œ„์น˜๊นŒ์ง€ ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ €์žฅํ•ด์คฌ๋‹ค.
    • dp[i][j] : ์‹œ์ž‘์ ์—์„œ ์ถœ๋ฐœํ•ด์„œ [i][j]๊นŒ์ง€ ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜
  • for๋ฌธ ํƒ์ƒ‰์„ ํ†ตํ•ด์„œ ํ˜„์žฌ ์œ„์น˜๊ฐ€ dp ๊ฐ’์ด ์•„๋‹ˆ๋ผ๋ฉด ํ•ด๋‹น ์œ„์น˜์— ๊ฐ€๋Š” ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ, ์•„๋ž˜๋„ step[i][j] ๋งŒํผ ๊ฐ€๋Š” ๊ฒฝ์šฐ๋‚˜ ์˜ค๋ฅธ์ชฝ์œผ๋กœ step[i][j]๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฒ”์œ„ ์•ˆ์˜ ๊ฐ’์ด๋ผ๋ฉด ์ด๋™ํ•œ ์œ„์น˜์— ํ˜„์žฌ ์œ„์น˜์˜ dp ๊ฐ’์„ ์ถ”๊ฐ€ํ•ด์„œ ์ด๋™ํ•œ ์œ„์น˜์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.
  • ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๊ฑฐ์ณ์„œ ๋งˆ์ง€๋ง‰์— ๋„๋‹ฌํ•˜๋ฉด for๋ฌธ์„ ์ข…๋ฃŒํ•˜๊ณ  ๋‚˜์˜ค๊ฒŒ ๋˜๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€ step[i][j]๊ฐ€ 0์ธ ๊ฒฝ์šฐ์—” ํ˜„์žฌ y ์œ„์น˜+0, ํ˜„์žฌ x ์œ„์น˜ +0์œผ๋กœ ๋ฒ”์œ„ ์•ˆ์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํŒ๋‹จํ•ด์„œ step[i][j](์ฆ‰, ์ข…์ )์—์„œ ์ž๊ธฐ ์ž์‹ ์„ ๋” ํ•ด์ฃผ์ง€ ์•Š๋„๋ก step[i][j]๊ฐ€ 0์ด ์•„๋‹Œ ๊ฒฝ์šฐ์—๋งŒ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์กฐ๊ฑด์„ ๊ฑธ์–ด์ค˜์•ผ ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.
import sys

n=int(sys.stdin.readline())
step=[list(map(int, sys.stdin.readline().split(' '))) for _ in range(n)]
# ๊ฐ ์œ„์น˜๊นŒ์ง€ ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜
dp=[[0]*(n) for _ in range(n)]
dp[0][0]=1
for i in range(n):
    for j in range(n):
        # 0์ด ์•„๋‹Œ ๊ฒฝ์šฐ, ์ฆ‰ ๋ฐฉ๋ฌธ ๊ฐ€๋Šฅํ•œ ์นธ์ธ ๊ฒฝ์šฐ
        # step์ด 0์ธ ๊ฒฝ์šฐ์—” i+step[i][j], j+step[i][j] ๋ชจ๋‘ ๊ทธ ์ž๋ฆฌ ๊ทธ๋Œ€๋กœ์ธ ๊ฒƒ์œผ๋กœ ๊ณ„์‚ฐ๋˜์–ด์„œ ํ˜„์žฌ ์œ„์น˜์˜ dp๊ฐ’์„ ๋”ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์‚ฐํ•ด์„  ์•ˆ๋œ๋‹ค
        if dp[i][j]!=0 and step[i][j]!=0:
            # ํ˜„์žฌ ์นธ์— ํ•ด๋‹นํ•˜๋Š” ์ ์ˆ˜๋งŒํผ ์ ํ”„ํ•ด์„œ dp ๊ฐ’ ๊ฐฑ์‹ 
            if i+step[i][j]<n:
                dp[i+step[i][j]][j]+=dp[i][j]
            if j+step[i][j]<n:
                dp[i][j+step[i][j]]+=dp[i][j]

print(dp[n-1][n-1])

https://www.acmicpc.net/board/view/119014

 

๊ธ€ ์ฝ๊ธฐ - BFS๋กœ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์—†๋Š” ์ด์œ  (์ฃผ๊ด€์ ์ธ ์ƒ๊ฐ)

๋Œ“๊ธ€์„ ์ž‘์„ฑํ•˜๋ ค๋ฉด ๋กœ๊ทธ์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

www.acmicpc.net

<์ด ๋ฌธ์ œ๋ฅผ BFS๋กœ ํ’€ ์ˆ˜ ์—†๋Š” ์ด์œ >