PS/Java
[SWEA] 1289. 원재의 메모리 복구하기
siyamaki
2021. 3. 9. 14:35
import java.util.Scanner;
import java.io.FileInputStream;
public class Solution {
public static void main(String args[]) throws Exception {
Scanner sc = new Scanner(System.in);
String testCase = sc.next();
int T = Integer.parseInt(testCase);
String solve[] = new String[T];
for(int i = 0; i < T; i++) {
int count = 0;
char bit = '0';
String memory = sc.next();
for(int j = 0; j < memory.length(); j++) {
if((memory.charAt(j) != bit) && bit == '1') {
count++;
bit = '0';
} else if ((memory.charAt(j) != bit) && bit == '0') {
count++;
bit = '1';
}
}
solve[i] = "#"+Integer.toString(i+1)+" "+Integer.toString(count);
}
for(String k : solve) {
System.out.println(k);
}
sc.close();
}
}
[풀이]
비교할 초기 bit를 0으로 설정해 놓는다.
"메모리 bit중 하나를 골라 0인지 1인지 결정하면 해당 값이 메모리의 끝까지 덮어씌우는 것이다." 라는 설명이 있는데 끝까지 덮어 씌울 필요가 없다.
초기 메모리는 전부 0으로 시작한다. 해당 값이 메모리의 끝까지 덮어씌운다는 것은 즉 1과 0이 바뀌는 횟수이다.
ex) 001101이 되려면 000000의 첫번째 bit부터 시작하여 다음 비트와 이전 비트를 비교하면서 값이 바뀐 횟수를 count하면 된다.