[백준/BOJ] 2138. 전구와 스위치 [Gold 5]

jychan99·2023년 9월 21일
0

  1. 전구와 스위치
    문제출처 : https://www.acmicpc.net/problem/2138
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer st;
    static boolean flag=true,flag2=true;
    static int N,result=0,result2=1,temp;
    static String[] arr,arr2,target;

    static String toggle(String i) {
        if (i.equals("0")) {
            return "1";
        } else {
            return "0";
        }
    }

    public static void main(String args[])throws IOException{
        N = Integer.parseInt(br.readLine());

        arr = br.readLine().split("");
        target = br.readLine().split("");

        arr2=arr.clone();
        for(int i=0;i<2;i++){
            arr2[i] = toggle(arr2[i]);
        }

        for(int i=1;i<N;i++){
            if(i==N-1){
                if(!arr[i-1].equals(target[i-1])){
                    arr[i-1] = toggle(arr[i-1]);
                    arr[i] = toggle(arr[i]);
                    result++;
                }
            }else{
                if(!arr[i-1].equals(target[i-1])){
                    arr[i-1] = toggle(arr[i-1]);
                    arr[i] = toggle(arr[i]);
                    arr[i+1] = toggle(arr[i+1]);
                    result++;
                }
            }
        }

        for(int i=1;i<N;i++){
            if(i==N-1){
                if(!arr2[i-1].equals(target[i-1])){
                    arr2[i-1] = toggle(arr2[i-1]);
                    arr2[i] = toggle(arr2[i]);
                    result2++;
                }
            }else{
                if(!arr2[i-1].equals(target[i-1])){
                    arr2[i-1] = toggle(arr2[i-1]);
                    arr2[i] = toggle(arr2[i]);
                    arr2[i+1] = toggle(arr2[i+1]);
                    result2++;
                }
            }
        }

        flag = Arrays.equals(arr,target);
        flag2 = Arrays.equals(arr2,target);

        if(flag==false && flag2==false){
            System.out.println(-1);
        }else if(flag==true && flag2==false){
            System.out.println(result);
        }else if(flag==false && flag2==true){
            System.out.println(result2);
        }else {
            if(result<=result2){
                System.out.println(result);
            }else{
                System.out.println(result2);
            }
        }
     }
}

참고블로그 : https://staticvoidlife.tistory.com/143

여기 참고블로그에 정말 깔끔하게 설명을 해놓으셔서 덕분에 풀 수 있었다.
첫번째 스위치를 누르는가 안누르는가 2가지 케이스로 문제가 훨씬 쉽게 느껴졌는데, 그 생각까지 도달하기가 어려운것 같다ㅠ
코딩할때도 애를 먹었는데 처음에 ==를 썻다가 계속 안되길래 찾아봤더니 .equal을 써야하더라

profile
내가 지금 두려워 하고 있는 일이 바로 내가 지금 해야 할 일이다. 🐥

0개의 댓글