์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ๋ฐ์ (์ผ์ชฝ ๋ฐ, ์ค๋ฅธ์ชฝ ๋ฐ)์ฒ๋ผ ํ๋์ ์ขํ๋ก ๋ํ๋์ ๋ ๋งค๋ฒ ๋ฐ์ ์ฎ๊ธธ ๋๋ง๋ค ๊ฐ๋ฅํ ๋ชจ๋ ์ขํ์ ๋ํด์ ๊ณ์ฐํด์ผ ํ๋ค. ๋งค๋ฒ ์ต์ ์ ์ ํ์ ํ๋ค๊ณ ํด์ ์ต์ข ์ ์ผ๋ก ์ต์๊ฐ ๋๋ค๋ ๊ฒ์ ๋ณด์ฅํ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ํด๋น ๋ฌธ์ ๋ ๊ทธ๋ฆฌ๋๊ฐ ์๋๋ผ DP๋ก ํ ์ ์๊ฒ ๋๋ค.
์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ๋ฐ์ด ๋์ผ ์ ์๋ ์์น๋ 0~5๋ก ์ขํ๋ก ๋ํ๋ด๋ฉด 5x5ํฌ๊ธฐ์ 2์ฐจ์ ๋ฐฐ์ด์ด ๋๋ค. ๋ฐ์ ์ฎ๊ธฐ๋ ํ์๋ N๋ฒ์ด๊ณ ๋งค๋ฒ ๋ฐ์ ์ฎ๊ธธ ๋๋ง๋ค 5x5์ 2์ฐจ์์ ๋ฐฐ์ด์ ๋ํ ๊ณ์ฐ์ ํ๊ฒ ๋๋ฏ๋ก 10๋งx25 = 250๋ง์ ์ฐ์ฐ์ ์ํํ๊ฒ ๋๋ค.
์ฒ์ ์์์ (0, 0)์ผ๋ก ์ฒซ๋ฒ์งธ๋ก ๋ฐ์ ์ฎ๊ฒจ์ผ ํ๋ ์นธ์ x์นธ์ด๋ค. 0์์๋ ์ด๋๋ก ์์ง์ฌ๋ 2๋งํผ์ ํ์ ์ป๊ฒ ๋๋ฏ๋ก (0, x)์ (x, 0)์ ๊ฐ๊ฐ ๊ฐ2๋ฅผ ์ด๊ธฐํํด๋๊ณ ์์ํ๋ฉด ๋๋ค.
import java.util.*;
import java.io.*;
public class Main {
static int getPower(int s, int e) {
if (s == 0) return 2;
if (s == e) return 1;
if (s == 1) {
if (e == 3) return 4;
else return 3;
} else if (s == 2) {
if (e == 4) return 4;
else return 3;
} else if (s == 3) {
if (e == 1) return 4;
else return 3;
} else {
if (e == 2) return 4;
else return 3;
}
}
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
List<Integer> arr = new ArrayList<>();
int input;
while (true) {
input = sc.nextInt();
if (input == 0) break;
arr.add(input);
}
int N = arr.size();
if (N == 0) System.out.println(0);
if (N > 0) {
int[][][] dp = new int[N][5][5];
int next = arr.get(0);
int left;
int right;
int score;
dp[0][next][0] = 2;
dp[0][0][next] = 2;
for (int i = 0; i < N-1; i++) {
next = arr.get(i+1);
for (int j = 0; j < 5; j++) {
for (int k = 0; k < 5; k++) {
score = dp[i][j][k];
if (dp[i][j][k] == 0) continue;
left = getPower(j, next);
right = getPower(k, next);
if (dp[i+1][next][k] == 0) {
dp[i+1][next][k] = score + left;
} else {
dp[i+1][next][k] = Math.min(dp[i+1][next][k], score + left);
}
if (dp[i+1][j][next] == 0) {
dp[i+1][j][next] = score + right;
} else {
dp[i+1][j][next] = Math.min(dp[i+1][j][next], score + right);
}
}
}
}
int answer = Integer.MAX_VALUE;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (dp[N-1][i][j] == 0) continue;
answer = Math.min(answer, dp[N-1][i][j]);
}
}
System.out.println(answer);
}
}
}