카테고리 없음

[다시풀기/릿코드/javascript] 62. Unique Paths

_서리__ 2023. 4. 3. 10:25

<나의 풀이>

1. 계산을 쉽게하기 위해 작은것을 m으로 둔다.

2. m===1일경우 방법은 1개이다.

3. m===2일 경우 방법은 n개이다.(한번만 밑으로 내려갈 수 있는데 이걸 n개중에 고를 수 있다.)

4. m===3일 경우 방법은 1부터 n까지 모든 수의 합이다. 

5. m>3일 경우 m===3이 될때까지 m-1을 해가며 재귀로 더해주면 된다.

var uniquePaths = function(m, n) {
    if(m>n){
        let temp = m;
        m = n;
        n = temp;
    }
    if(m===1) return 1;
    if(m===2) return n;
    if(m===3) {
        let sum = 0;
        for(let i=1;i<=n;i++){
            sum+=i
        }
        return sum;
    }
    //n을 다 더하되.... m===3이 될때까지 n을 빼야함.
    let sum = 0;
    for(let i=1;i<=n;i++){
        sum+=uniquePaths(m-1,i)
    }
    return sum
};

 다만 이 방법은 속도가 아주아주 느리다!!

이 규칙을 알아내라 애썼는데 ㅎㅎ 더욱 간단한 풀이법이 있었다.

 

var uniquePaths = function(m, n) {
    let map = new Array(m).fill([]).map(()=>new Array(n).fill(1))
    for(let y=1;y<m;y++){
        for(let x=1;x<n;x++){
            map[y][x] = map[y-1][x]+map[y][x-1]
        }
    }
    return map[m-1][n-1]
};

훨씬 간단한 dp를 이용한 풀이법!

map[y][x] = map[y-1][x]+map[y][x-1]임을 이용하였다!!