이 문제는 0과 1이 서로 같은지 비교해주어야 하므로 char로 입력받자.
참고 블로그
✅ 규칙
그리디 (탐욕법, greedy)
하나의 규칙을 적용해 최선의 답을 도출해낸다.
규칙을 찾아보자.
1번 스위치가 바뀌냐 안 바뀌냐에 따라 2가지로 나누어주고 시작한다.
이런 그리디 풀 때 규칙 어떻게 찾지????
문제마다 다 다른데????
✅ 코드
0과 1을 바꿀 때 항상 !!!!char이면 '0' '1'로 써줘야 한다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
static int N, cnt1, cnt2;
static char[] AInput;
static char[] BInput;
static char[] Output;
static int[] dx = {-1, 0, 1};
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
String s1 = br.readLine();
String s2 = br.readLine();
AInput = s1.toCharArray();
BInput = s1.toCharArray();
Output = s2.toCharArray();
int result = Integer.MAX_VALUE;
changeBulb(AInput, 0);
cnt1++;
for (int i = 1; i < N; i++) {
if (AInput[i - 1] != Output[i - 1]) {
changeBulb(AInput, i);
cnt1++;
}
if (BInput[i - 1] != Output[i - 1]) {
changeBulb(BInput, i);
cnt2++;
}
}
if (AInput[N - 1] == Output[N - 1]) {
result = Math.min(result, cnt1);
}
if (BInput[N - 1] == Output[N - 1]) {
result = Math.min(result, cnt2);
}
if (result == Integer.MAX_VALUE) {
System.out.println(-1);
} else {
System.out.println(result);
}
}
private static void changeBulb(char[] input, int index) {
for (int k = 0; k < 3; k++) {
int nowX = index + dx[k];
if (nowX >= 0 && nowX < N) {
if (input[nowX] == '0') {
input[nowX] = '1';
} else {
input[nowX] = '0';
}
}
}
}
}