728x90
🔗 백준 2342 Dance Dance Revolution
📌오늘의 학습 키워드
- DP 문제
✨공부한 내용 본인의 언어로 정리하기
- 3차원 배열에 DP를 저장해야했다.
- 전체적인 논리는 각 단계의 이전까지의 정보를 가지고 현재 값을 업데이트하여 계속 총 비용을 계산해 나가는 것이다.
📚오늘의 회고
- DP에서 무엇을 저장하고 어떻게 작은 문제로 나눌 것인 지 생각하는 게 쉽지 않다...
[🤓문제 해결 코드]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int[] arr;
static int[][][] dp;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
arr = new int[100001];
int num, idx=0;
while(true) {
num = Integer.parseInt(st.nextToken());
if(num == 0)
break;
arr[++idx] = num;
}
dp = new int[2][5][5];
// 0 이전, 1 현재
for(int i=0; i<5; i++) {
for(int j=0; j<5; j++) {
dp[0][i][j] = Integer.MAX_VALUE;
dp[1][i][j] = Integer.MAX_VALUE;
}
}
dp[0][0][0] = 0;
int next = 0;
// 들어온 숫자를 순회
for(int k=1; k<=idx; k++) {
next = arr[k];
for(int i=0; i<5; i++) {
for(int j=0; j<5; j++) {
// 불가능한 상황이면 패스
if(dp[0][i][j] == Integer.MAX_VALUE)
continue;
dp[1][i][next] = Math.min(dp[1][i][next], dp[0][i][j] + cost(j, next));
dp[1][next][j] = Math.min(dp[1][next][j], dp[0][i][j] + cost(i, next));
}
}
// 값 복사하고 현재값 초기화
for(int i=0; i<5; i++) {
for(int j=0; j<5; j++) {
dp[0][i][j] = dp[1][i][j];
dp[1][i][j] = Integer.MAX_VALUE;
}
}
for(int i=0; i<5; i++) {
for(int j=0; j<5; j++) {
System.out.printf("%d ", dp[0][i][j]);
}
System.out.println();
}
System.out.println();
}
// 마지막까지 왔을 때의 최적값들만 업데이트 되어있음
int ans = Integer.MAX_VALUE;
for(int i=0; i<5; i++) {
ans = Math.min(ans, dp[0][i][next]);
ans = Math.min(ans, dp[0][next][i]);
}
System.out.println(ans);
}
static int cost(int a, int b) {
if(a == b)
return 1;
if(a == 0 || b == 0) {
return 2;
}
if(Math.abs(a-b)==2) {
return 4;
}
return 3;
}
}
728x90
'코딩테스트' 카테고리의 다른 글
백준 2842 집배원 한상덕 (0) | 2025.02.20 |
---|---|
백준 1719 택배 자바 (0) | 2025.02.20 |
백준 17609 회문 자바 (0) | 2025.02.19 |
백준 11404 플로이드 (0) | 2025.02.18 |
삼성 SDS 2025년도 상반기 알고리즘 특강 기록 (0) | 2025.02.18 |