Publish:

νƒœκ·Έ: , , , , ,

μΉ΄ν…Œκ³ λ¦¬:

img_3.png

문제

문제 링크

img_3.png

μ„€λͺ…

λ‘œλ΄‡μ΄ 격자 μ™Όμͺ½ 상단뢀터 였λ₯Έμͺ½ ν•˜λ‹¨ λκΉŒμ§€ μ΄λ™ν•˜λŠ” 경우의 수λ₯Ό μ°ΎλŠ” 문제

풀이

  1. dp λ°°μ—΄ μ •μ˜ : (i,j) μ˜μ—­μ— λ„λ‹¬ν•˜λŠ” 경둜의 수
    • (i,0) / (0,j) 쀄은 경우의 μˆ˜κ°€ ν•˜λ‚˜λΏμ΄λ―€λ‘œ 미리 μ±„μ›Œ λ†“λŠ”λ‹€.
  2. 점화식 λ„μΆœ : λ¬Έμ œμ—μ„œ λ‘œλ΄‡μ€ 였λ₯Έμͺ½ λ˜λŠ” μ•„λž˜ 둜 밖에 움직이지 λͺ»ν•œλ‹€κ³  ν–ˆμœΌλ―€λ‘œ (i, j) μ˜μ—­μ— λ„λ‹¬ν•˜λŠ” 경우의 μˆ˜λŠ” μ™Όμͺ½μ—μ„œ μ˜€λŠ” 경우의 수 + μœ„μ—μ„œ μ˜€λŠ” 경우의 수둜 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.
    • dp[i][j] = dp[i][j - 1] + dp[i - 1][j]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
  public int uniquePaths(int m, int n) {
    int[][] dp = new int[m][n];
    
    // (i, 0) μ±„μš°κΈ°
    for (int i = 0; i < m; i++) {
      dp[i][0] = 1;
    }
    // (0, i) μ±„μš°κΈ°
    for (int i = 0; i < n; i++) {
      dp[0][i] = 1;
    }

    for (int i = 1; i < m; i++) {
      for (int j = 1; j < n; j++) {
        dp[i][j] = dp[i][j - 1] + dp[i - 1][j];
      }
    }

    return dp[m - 1][n - 1];
  }
}
λ°©λ¬Έν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€! λŒ“κΈ€,지적,ν”Όλ“œλ°± μ–Έμ œλ‚˜ ν™˜μ˜ν•©λ‹ˆλ‹€πŸ˜Š

λŒ“κΈ€λ‚¨κΈ°κΈ°