문제
https://school.programmers.co.kr/learn/courses/30/lessons/1832
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
단순 bfs/dfs로는 시간초과가 발생하는 dp 문제
오른쪽 혹은 아래로만 이동할 수 있기 때문에 dp 배열을 dp[m+1][n+1][2]로 생성
- dp[i][j][0]: (i, j) 위치에 도달할 수 있는 경로 중 위에서 내려온 경로의 수
- dp[i][j][1]: (i, j) 위치에 도달할 수 있는 경로 중 왼쪽에서 온 경로의 수
cityMap이 0일 때(자동차가 자유롭게 이동할 수 있는 경우) dp[i][j][0], dp[i][j][1]을 더해서 갱신하기 때문에
return은 dp[i][j][0]만 해줘도 정답
import java.util.*;
class Solution {
static int MOD = 20170805;
public int solution(int m, int n, int[][] cityMap) {
int answer = 0;
int[][][] dp = new int[m+1][n+1][2];
dp[1][1][0] = 1;
dp[1][1][1] = 1;
for(int i=1; i<=m; i++) {
for(int j=1; j<=n; j++) {
if(cityMap[i-1][j-1] == 0) {
dp[i][j][0] += ((dp[i-1][j][0] + dp[i][j-1][1]) % MOD);
dp[i][j][1] += ((dp[i-1][j][0] + dp[i][j-1][1]) % MOD);
} else if (cityMap[i-1][j-1] == 1) {
dp[i][j][0] = 0;
dp[i][j][1] = 0;
} else {
dp[i][j][0] = dp[i-1][j][0];
dp[i][j][1] = dp[i][j-1][1];
}
}
}
return dp[m][n][0];
}
}
'문제 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 호텔 방 배정 - Java (0) | 2024.09.03 |
---|---|
[프로그래머스] N으로 표현 - Java (0) | 2024.09.02 |
[프로그래머스] 풍선 터트리기 - Java (0) | 2024.09.01 |
[프로그래머스] 코딩 테스트 공부 - Java (0) | 2024.08.31 |
[프로그래머스] 아이템 줍기 - Java (0) | 2024.08.31 |