링크 : https://school.programmers.co.kr/learn/courses/30/lessons/389480
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 풀이
DP로 풀이, 처음 점화식을 세우는게 어려워 다른 블로그를 참고했다.
점화식 : dp[x][y] = z
x개의 물건을 훔쳤을 때, B도둑의 흔적 개수는 y, A도둑의 흔적 개수는 z
import java.util.*;
class Solution {
public int solution(int[][] info, int n, int m) {
int maxVal = 100000;
// 점화식 dp[x][y]: z
// x개의 물건을 훔쳤을 때, B도둑의 흔적 개수는 y, A도둑의 흔적 개수는 z
int dp[][] = new int[info.length+1][m];
// dp 배열 초기화
for(int i=0; i<info.length+1; i++) {
Arrays.fill(dp[i], maxVal);
}
dp[0][0] = 0;
for(int i=1; i<=info.length; i++) {
int thiefA = info[i-1][0];
int thiefB = info[i-1][1];
for(int j=0; j<m; j++) {
// A도둑이 훔쳤을 경우
dp[i][j] = Math.min(dp[i][j], dp[i-1][j] + thiefA);
// B도둑이 훔쳤을 경우
if(j+thiefB < m) {
dp[i][j+thiefB] = Math.min(dp[i][j+thiefB], dp[i-1][j]);
}
}
}
int answer = maxVal;
for(int j = 0; j < m; j++){
answer = Math.min(dp[info.length][j], answer);
}
if(answer >= n) {
return -1;
} else {
return answer;
}
}
}'알고리즘 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] 지게차와 크레인(Java) (0) | 2025.03.12 |
|---|---|
| [프로그래머스] 유연근무제(Java) (1) | 2025.03.10 |
| [프로그래머스] 조이스틱(Java) (0) | 2025.03.06 |
| [프로그래머스] H-Index(Java) (0) | 2025.02.27 |
| [프로그래머스] 가장 큰 수(Java) (0) | 2025.02.26 |