본문 바로가기

카테고리 없음

[Leetcode 63] Unique Paths II

You are given an m x n integer array grid. There is a robot initially located at the top-left corner (i.e., grid[0][0]). The robot tries to move to the bottom-right corner (i.e., grid[m-1][n-1]). The robot can only move either down or right at any point in time.

An obstacle and space are marked as 1 or 0 respectively in grid. A path that the robot takes cannot include any square that is an obstacle.

Return the number of possible unique paths that the robot can take to reach the bottom-right corner.

The testcases are generated so that the answer will be less than or equal to 2 * 109.

 

Example 1:

Input: obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]
Output: 2
Explanation: There is one obstacle in the middle of the 3x3 grid above.
There are two ways to reach the bottom-right corner:
1. Right -> Right -> Down -> Down
2. Down -> Down -> Right -> Right

Example 2:

Input: obstacleGrid = [[0,1],[0,0]]
Output: 1

 

Constraints:

  • m == obstacleGrid.length
  • n == obstacleGrid[i].length
  • 1 <= m, n <= 100
  • obstacleGrid[i][j] is 0 or 1.

 

class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int m = obstacleGrid.length;
        int n = obstacleGrid[0].length;
        
        int[][] arr = new int[m][n];
        // 로봇이 갈 수 있는 어디던지 obstacle 가능이기 때문에 [0][0]에도 있을 수 있음.
        // 무조건 로봇이 갈 수 있다고 하면 안됨. ([[1]])
        arr[0][0] = 1-obstacleGrid[0][0]; 
        for(int i=0; i<m; i++){
            if(obstacleGrid[i][0] == 1){
                break;
            }
            arr[i][0] = 1;
        }
        for(int i=0; i<n; i++){
            if(obstacleGrid[0][i] == 1){
                break;
            }
            arr[0][i] = 1;
        }
        
        // for(int i=0; i<m; i++){
        //     for(int j=0; j<n; j++){
        //         System.out.print(arr[i][j]+" ");
        //     }
        //     System.out.println();
        // }
        // System.out.println();
        
        for(int i=1; i<m; i++){
            for(int j=1; j<n; j++){
                if(obstacleGrid[i][j] == 1){
                    arr[i][j] = 0;
                    continue;
                }
                arr[i][j] = arr[i-1][j]+arr[i][j-1];
            }
        }
        return arr[m-1][n-1];
    }
}

 

문제를 읽어봤을 때 상식적으로 [0, 0]에는 장애물이 없을 것처럼 생각이 되는데.. 그게 아니어서 조금 시간이 걸렸다.

별로 썩,, 좋은 문제는 아니었던 것 같다.