[SWEA] 1289. 원재의 메모리 복구하기
문제 링크
풀이 과정
아래 예시를 보며 설명하겠습니다.
target 은 되돌아 가려고 하는 원래 상태를, before 는 덮어씌우기 전 메모리 모습을, after 는 덮어씌운 후의 메모리 모습을 나타냅니다. target[0] 과 target[1] 이 다르므로, 1번 인덱스부터 끝까지 1로 덮어씌우는 작업이 있었던 것을 알 수 있습니다. 여기서 한 번을 고치게 됩니다.
target[1]과 target[2]이 다르므로, 2번 인덱스부터 끝까지 0으로 덮어씌우는 작업이 있었던 것을 알 수 있습니다. 두 번 고쳤습니다.
target[2]와 target[3]이 다르므로, 3번 인덱스부터 끝까지 1로 덮어씌우는 작업이 있었고, target[3]과 target[4]가 다르므로 4번 인덱스를 0으로 덮어씌우는 작업이 있었습니다.
즉, 문제에서 주어진 메모리의 원래 값의 현재 요소 대비 다음 요소가 변경되었다면 카운트를 증가시키고, 그 값을 출력하면 정답이 됩니다. 또한, 맨 처음 인덱스가 1이라면, 기존 카운트는 1로 초기화 해주어야 합니다.
코드
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int TC = sc.nextInt();
for (int tc = 1; tc <= TC; tc++) {
char[] arr = sc.next().toCharArray();
int answer = arr[0] == '0' ? 0 : 1;
for (int i = 1; i < arr.length; i++) {
if (arr[i] != arr[i - 1]) answer++;
}
System.out.println("#" + tc + " " + answer);
}
}
}
댓글남기기