처음 메모리 상태에서 입력으로 주어진 메모리의 상태로 바꾸는 것은 아래와 같이 두가지 방법이 있다.
1) 0,1,2...올라가는 순으로 바꾸는 방법
2) 2,1,0...내려가는 순으로 바꾸는 방법
메모리 비트를 하나 바꾸면 해당 값이 메모리 끝까지 덮어쓰기 때문에,
2,1,0.. 이런 식으로 내려가는 순으로 바꾸는 방법은
2에서 이미 맞는 값으로 바꾸어놓아도 1에서 값을 다시 바꿔버리면 이전에 바꿔놓은게 무용지물이 된다.
이런 식으로 바꿔나가면 당연히 최소 횟수로 복구할 수가 없다.
그래서 올라가는 순으로 바꿔주어야 한다.
import java.util.*;
class Solution
{
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
StringBuffer sb = new StringBuffer();
int T = Integer.parseInt(sc.nextLine());
for(int tc=1; tc<=T; tc++){
sb.append("#").append(tc).append(" ");
String input = sc.nextLine();
int inputArray[] = getInputArray(input);
sb.append(solve(inputArray)).append("\n");
}
System.out.println(sb);
}
static int solve(int inputArray[]){
int count = 0;
int len = inputArray.length;
int originalArray[] = new int[len];
for(int i=0; i<len; i++){
if(inputArray[i] != originalArray[i]){
count++;
for(int j=i; j<len; j++){
originalArray[j] = inputArray[i];
}
}
}
return count;
}
static int[] getInputArray(String input){
int array[] = new int[input.length()];
for(int i=0; i<input.length(); i++){
array[i] = input.charAt(i) - '0';
}
return array;
}
}