알고리즘/프로그래머스

등굣길 다시 풀어보기 - 왜 효율성 테스트에서 통과가 안 되는가 -> 맵 확인용 출력 때문에 그랬다고 한다

베리영young 2024. 2. 21. 10:03

 

새로 푼 코드

import java.util.*;
import java.io.*;

class Solution {
    public int solution(int m, int n, int[][] puddles) {
        int[][] map = new int[n][m];
        //웅덩이 표시
        for(int[] puddle : puddles) {
            map[puddle[1]-1][puddle[0]-1] = -1;
        }
        
        //최단거리로 가생이 가는 방법 하나뿐
        for(int i=1; i<m; i++){
            if(map[0][i] == -1) break;
            map[0][i] = 1;
        }
        for(int i=1; i<n; i++){
            if(map[i][0] == -1) break;
            map[i][0] = 1;
        }
        
        //
        for(int i=1; i<n; i++){
            for(int j=1; j<m; j++) {
                int left = map[i][j-1];
                int top = map[i-1][j];
                
                if(map[i][j]== -1) continue;
                
                if(left == -1) {
                    map[i][j] = top;
                }
                else if(top == -1) {
                    map[i][j] = left;
                }
                else {
                    map[i][j] = (left+top) % 1000000007;
                }
            }
        }
        //
        for(int map2[] : map) {
            System.out.println(Arrays.toString(map2));
        }
        return map[n-1][m-1] % 1000000007;
    }
}

 

여기서 map2부분 때문에 효율성에서 통과 못한 거 실화입니까

 

원래 코드

import java.util.*;
import java.io.*;

class Solution {
    static int[][] dp;
    
    public int solution(int m, int n, int[][] puddles) {
        dp = new int[n][m];
        for(int[] p : puddles){
            // System.out.println(Arrays.toString(p));
            dp[p[1]-1][p[0]-1]  = -1;
        }
        
        //가생이 초기화
        for(int i=0; i<n; i++){
            if(dp[i][0]==-1) break;
            dp[i][0] = 1;
        }
        for(int i=1; i<m; i++){
            if(dp[0][i]==-1) break;
            dp[0][i] = 1;
        }
        //1,1부터
        for(int i=1; i<n; i++) {
            for(int j=1; j<m; j++){
                if(dp[i][j] ==-1) continue;
                
                if(dp[i-1][j]==-1) dp[i][j] = dp[i][j-1];
                else if(dp[i][j-1]==-1) dp[i][j] = dp[i-1][j];
                else{
                    dp[i][j] = (dp[i][j-1]+dp[i-1][j])%1000000007;
                }
            }
        }
        
        return dp[n-1][m-1]%1000000007;
    }
}