무조건 최적의 솔루션만 찾아야되나..



        

Scanner sc = new Scanner(System.in);

        

T = sc.nextInt();        

for(test_case = 1; test_case <= T; test_case++) {

// 이 부분에서 알고리즘 프로그램을 작성하십시오.

int blockCount;

int[] blocksA;

int[] blocksB;


blockCount = sc.nextInt();

blocksA = new int[blockCount];

blocksB = new int[blockCount];

for (int i = 0; i < blockCount; i ++)

blocksA[i] = sc.nextInt();

int count = 0;

boolean zero = false;

boolean atime = true;

while (!zero) {

int[] bA, bB;

if (atime) {

bA = blocksA;

bB = blocksB;

}

else {

bA = blocksB;

bB = blocksA;

}

zero = true;

for (int i = 0; i < blockCount; i ++) {

if (bA[i] == 0) {

bB[i] = 0;

continue;

}

zero = false;

int a, b, c;

if (i > 0) a = bA[i - 1];

else a = 0;

if (i < blockCount - 1) c = bA[i + 1];

else c = 0;

b = bA[i];

if (a >= b && c >= b) {

bB[i] = bA[i] - 1;

}

else {

int d = Math.min(a, c);

bB[i] = d;

}

}

count += 1;

atime = !atime;

}

// 이 부분에서 정답을 출력하십시오.

System.out.println("Case #" + test_case);

System.out.println("COUNT " + (count - 1));

}

}

}