Skip to content

Commit 274ddaa

Browse files
authored
[20250704] BOJ / G3 / Dance Dance Revolution / 이강현
1 parent 6d5e78c commit 274ddaa

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
```java
2+
import java.util.*;
3+
import java.io.*;
4+
5+
public class Main{
6+
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7+
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
8+
static StringTokenizer st;
9+
static int[][][] dp; //dp[현재 명령][왼발][오른발] = 드는 힘
10+
public static void main(String[] args) throws Exception{
11+
st = new StringTokenizer(br.readLine());
12+
int N = st.countTokens();
13+
14+
dp = new int[N][5][5];
15+
for (int i = 0; i < N; i++) {
16+
for (int j = 0; j < 5; j++) {
17+
Arrays.fill(dp[i][j], Integer.MAX_VALUE);
18+
}
19+
}
20+
dp[0][0][0] = 0;
21+
22+
for (int i = 1; i < N; i++) {
23+
int cur = Integer.parseInt(st.nextToken());
24+
for (int j = 0; j < 5; j++) {
25+
for (int k = 0; k < 5; k++) {
26+
if(dp[i-1][j][k] != Integer.MAX_VALUE) {
27+
if(j == 0){
28+
dp[i][cur][k] = Math.min(dp[i][cur][k],dp[i-1][j][k] + 2);
29+
}else{
30+
int jDiff = Math.abs(cur - j);
31+
if(jDiff == 0){ //같은 위치
32+
dp[i][cur][k] = Math.min(dp[i][cur][k], dp[i-1][j][k] + 1);
33+
}else if(jDiff % 2 == 1) { //인접한 경우
34+
dp[i][cur][k] = Math.min(dp[i][cur][k], dp[i-1][j][k] + 3);
35+
}else{// 반대 경우
36+
dp[i][cur][k] = Math.min(dp[i][cur][k], dp[i-1][j][k] + 4);
37+
}
38+
}
39+
if(k == 0){
40+
dp[i][j][cur] = Math.min(dp[i][j][cur],dp[i-1][j][k] + 2);
41+
}else{
42+
int kDiff = Math.abs(cur - k);
43+
if(kDiff == 0){ //같은 위치
44+
dp[i][j][cur] = Math.min(dp[i][j][cur], dp[i-1][j][k] + 1);
45+
}else if(kDiff % 2 == 1) { //인접한 경우
46+
dp[i][j][cur] = Math.min(dp[i][j][cur], dp[i-1][j][k] + 3);
47+
}else{// 반대 경우
48+
dp[i][j][cur] = Math.min(dp[i][j][cur], dp[i-1][j][k] + 4);
49+
}
50+
}
51+
}
52+
}
53+
}
54+
}
55+
int ans = Integer.MAX_VALUE;
56+
for (int i = 0; i < 5; i++) {
57+
for (int j = 0; j < 5; j++) {
58+
ans = Math.min(ans, dp[N-1][i][j]);
59+
}
60+
}
61+
bw.write(ans+"");
62+
bw.close();
63+
}
64+
}
65+
```

0 commit comments

Comments
 (0)