본문 바로가기
휴지통/알고리즘 & 자료구조

백준 2138

by 신재권 2023. 7. 26.
import java.io.BufferedReader;
import java.io.InputStreamReader;

class Main2138 {

   public static void main(String[] args) throws Exception {
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      int N = Integer.parseInt(br.readLine());
      boolean[] current1 = new boolean[N];
      boolean[] current2 = new boolean[N];
      boolean[] expect = new boolean[N];

      String s = br.readLine();
      for (int i = 0; i < N; i++) {
         if (s.charAt(i) == '1') {
            current1[i] = current2[i] = true;
         }
      }

      s = br.readLine();
      for (int i = 0; i < N; i++) {
         if (s.charAt(i) == '1') {
            expect[i] = true;
         }
      }

      //첫번째 전구를 키는 경우 current1
      current1[0] = !current1[0];
      current1[1] = !current1[1];

      int ans1 = 1;
      int ans2 = 0;

      for (int i = 1; i < N; i++) {
         if (current1[i - 1] != expect[i - 1]) { //i-1이 기대값과 다르다면 킨다.
            current1[i - 1] = !current1[i - 1];
            current1[i] = !current1[i];
            if (i < N - 1) {
               current1[i + 1] = !current1[i + 1];
            }
            ans1++;
         }

         if (current2[i - 1] != expect[i - 1]) {
            current2[i - 1] = !current2[i - 1];
            current2[i] = !current2[i];
            if (i < N - 1) {
               current2[i + 1] = !current2[i + 1];
            }
            ans2++;
         }
      }

      if (current1[N - 1] != expect[N - 1]) {
         ans1 = Integer.MAX_VALUE;
      }
      if (current2[N - 1] != expect[N - 1]) {
         ans2 = Integer.MAX_VALUE;
      }

      int min = Math.min(ans1, ans2);
      System.out.println(min == Integer.MAX_VALUE ? -1 : min);
   }

}

'휴지통 > 알고리즘 & 자료구조' 카테고리의 다른 글

백준 13164  (0) 2023.07.30
백준 11000  (0) 2023.07.28
백준 17615  (0) 2023.07.26
백준 21758  (0) 2023.07.25
백준 1931  (0) 2023.07.25