녕의 학습 기록
백준_2342 Dance Dance Revolution (DP) 본문
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BJ_2342_DanceDanceRevolution {
static int MAX = 10000000;
public static void main(String[] args) throws IOException {
int[][] m = {{1, 2, 2, 2, 2},
{0, 1, 3, 4, 3},
{0, 3, 1, 3, 4},
{0, 4, 3, 1, 3},
{0, 3, 4, 3, 1}};
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int[][][] d = new int[100001][5][5];
int i, l, r;
for (l=0; l<5; l++) {
for (r=0; r<5; r++) {
for (i=0; i<100001; i++) {
d[i][l][r] = MAX;
}
}
}
d[0][0][0] = 0;
int cnt = 0;
int n;
while (true) {
n = Integer.parseInt(st.nextToken()); //밟아야할 발판
if (n==0) {
break;
}
cnt++;
//왼발을 움직일 경우
for (r=0; r<5; r++) { //오른발 위치
if (n==r) {
continue;
} else {
for (i=0; i<5; i++) { //왼발의 이전 위치
d[cnt][n][r] = Math.min(d[cnt][n][r], d[cnt-1][i][r] + m[i][n]);
}
}
}
//오른발을 움직일 경우
for (l=0; l<5; l++) { //왼발 위치
if (n==l) {
continue;
} else {
for (i=0; i<5; i++) { //오른발의 이전 위치
d[cnt][l][n] = Math.min(d[cnt][l][n], d[cnt-1][l][i] + m[i][n]);
}
}
}
}
int result = MAX;
for (l=0; l<5; l++) {
for (r=0; r<5; r++) {
result = Math.min(result, d[cnt][l][r]); //마지막 시행번째에서 최솟값이 곧 답
}
}
System.out.println(new StringBuilder().append(result));
}
}
2342번: Dance Dance Revolution
입력은 지시 사항으로 이루어진다. 각각의 지시 사항은 하나의 수열로 이루어진다. 각각의 수열은 1, 2, 3, 4의 숫자들로 이루어지고, 이 숫자들은 각각의 방향을 나타낸다. 그리고 0은 수열의 마
www.acmicpc.net
'Algorithm > Algorithm 문제' 카테고리의 다른 글
백준_2098 외판워 순회 (DP - TPS) (0) | 2024.05.07 |
---|---|
백준_11049 행렬 곱셈 순서 (DP) (0) | 2024.04.28 |
백준_1328 고층 빌딩 (DP) (0) | 2024.04.21 |
백준_1915 가장 큰 정사각형 (DP) (0) | 2024.04.21 |
백준_9252 LCS 2 (DP) (1) | 2024.04.21 |