알고리즘/프로그래머스
등굣길 다시 풀어보기 - 왜 효율성 테스트에서 통과가 안 되는가 -> 맵 확인용 출력 때문에 그랬다고 한다
베리영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;
}
}