코테/프로그래머스
[프로그래머스/Lv. 3] 등굣길 (JAVA)
imname1am
2023. 10. 1. 22:29
반응형
🔺 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import java.util.*;
class Solution {
static final int mod = 1_000_000_007;
public int solution(int m, int n, int[][] puddles) {
int[][] dp = new int[n + 1][m + 1];
// dp 배열 초기화
dp[1][1] = 1;
for(int[] puddle : puddles) dp[puddle[1]][puddle[0]] = -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] > 0) dp[i][j] += dp[i - 1][j] % mod; // 위쪽 값
if(dp[i][j - 1] > 0) dp[i][j] += dp[i][j - 1] % mod; // 왼쪽 값
}
}
return dp[n][m] % mod;
}
}
|
cs |
🧩 해결 아이디어
• DP
- dp 배열 초기화 값 : 출발 지점은 1, 장애물은 -1로 설정
- dp 배열 완전탐색하면서 해당 칸 값이 -1이라면 웅더이이므로 패스
- 위쪽 값이 0보다 크다면, 현재 값에 위쪽 값을 더함
- 왼쪽 값이 0보다 크다면, 현재 값에 왼쪽 값을 더함
💥 유의사항
- else if로 하면 왼쪽과 위쪽값을 모두 포함시킬 수 없으므로 두 경우를 모두 처리하도록 if문 사용
- 12번째 줄에서dp[ puddle[1] ][ puddle[0] ] = -1;
이 아닌 dp[ puddle[1] ][ puddle[0] ] = -1;
이어야 함
💬 느낀 점
최단 경로래서 BFS로 풀 수는 있는데 효율성에서 통과가 안 된당
효율성 해결 방법 중에는 이런 것도 있었다.
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
[프로그래머스] 등굣길 JAVA
전형적인 DP 문제입니다. 어렵진 않은데 DP말고 다른 방식으로 풀면 효율성 테스트에서 시간초과가 나와 level 3 에 선정된것같습니다.집에서 오른쪽 아래로만 움직여 학교까지 가는 최단 거리를
velog.io
반응형