동적 계획법(Dynamic Programming) > 등굣길
https://school.programmers.co.kr/learn/courses/30/lessons/42898?language=java
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
처음 코드(효율성 0점)
class Solution {
public int solution(int m, int n, int[][] puddles) {
int answer = 0;
int[][] route = new int[m + 1][n + 1];
for(int i = 0; i < puddles.length; i++) {
route[puddles[i][0]][puddles[i][1]] = -1;
}
route[1][1] = 1;
for(int i = 1; i <= m; i++) {
for(int j = 1; j <= n; j++) {
if(route[i][j] == -1) {
continue;
}
if(route[i-1][j] == -1) route[i][j] += route[i][j-1];
else if(route[i][j-1] == -1) route[i][j] += route[i-1][j];
else route[i][j] += route[i-1][j] + route[i][j-1];
}
}
return route[m][n];
}
}

효율성 실패
질문하기 탭을 보니 1_000_000_007로 나눈 나머지를 구하지 않아서 실패했다는 글을 보고 마지막 문장만 return route[m][n] % 1_000_000_007;
이렇게 수정했다.
하지만 효율성 테스트 똑같이 실패
if(route[i-1][j] == -1) route[i][j] += route[i][j-1];
else if(route[i][j-1] == -1) route[i][j] += route[i-1][j];
else route[i][j] += (route[i-1][j] + route[i][j-1]) % 1_000_000_007;
}
}
return route[m][n];
계산 과정에서 나누어봤지만 효율성 테스트 5에서 시간 초과가 떴다.
if(route[i-1][j] == -1) route[i][j] += route[i][j-1] % 1_000_000_007;
else if(route[i][j-1] == -1) route[i][j] += route[i-1][j] % 1_000_000_007;
else route[i][j] += (route[i-1][j] + route[i][j-1]) % 1_000_000_007;
}
}
return route[m][n];
모든 계산 결과에서 나머지를 구해서 통과했다.
제출 코드
class Solution {
public int solution(int m, int n, int[][] puddles) {
int answer = 0;
int[][] route = new int[m + 1][n + 1];
for(int i = 0; i < puddles.length; i++) {
route[puddles[i][0]][puddles[i][1]] = -1;
}
route[1][1] = 1;
for(int i = 1; i <= m; i++) {
for(int j = 1; j <= n; j++) {
if(route[i][j] == -1) {
continue;
}
if(route[i-1][j] == -1) route[i][j] += route[i][j-1] % 1_000_000_007;
else if(route[i][j-1] == -1) route[i][j] += route[i-1][j] % 1_000_000_007;
else route[i][j] += (route[i-1][j] + route[i][j-1]) % 1_000_000_007;
}
}
return route[m][n];
}
}
'Algorithm' 카테고리의 다른 글
프로그래머스 압축 Java - 최적화하기 (0) | 2024.01.25 |
---|---|
[Programmers] 가장 먼 노드 Java (0) | 2023.11.22 |
[Programmers] 단속 카메라 Java (0) | 2023.11.22 |
[SWEA] 1859. 백만 장자 프로젝트 D2 Java (0) | 2023.10.27 |
[Programmers] 동적 계획법 > 정수 삼각형 (Java) (0) | 2023.10.13 |