2342번: Dance Dance Revolution
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
ArrayList<Integer> query = new ArrayList<>();
while(true){
int tmp = Integer.parseInt(st.nextToken());
if(tmp == 0) break;
query.add(tmp);
}
int n = query.size();
int[][][] dp = new int[n+1][5][5];
for(int i = 0; i<n+1; i++){
for(int j = 0; j<5; j++){
for(int k = 0; k<5; k++){
dp[i][j][k] = 2147483643;
}
}
}
dp[0][0][0] = 0;
for(int i = 1; i<n+1; i++){
int next = query.get(i-1);
for(int j = 0; j<5; j++){
for(int k = 0; k<5; k++){
dp[i][next][k] = Math.min(dp[i][next][k], dp[i-1][j][k] + distance(j, next));
dp[i][j][next] = Math.min(dp[i][j][next], dp[i-1][j][k] + distance(k, next));
}
}
}
int min = Integer.MAX_VALUE;
for(int j = 0; j<5; j++){
for(int k = 0; k<5; k++){
min = Math.min(dp[n][j][k],min);
}
}
System.out.println(min);
}
public static int distance(int l, int r){
if(l == r) return 1;
else if(l == 0) return 2;
else if(Math.abs(l-r) == 2) return 4;
else return 3;
}
}