개발 블로그
article thumbnail
Published 2023. 11. 1. 18:53
1080번. 행렬 Algorithm/백준 알고리즘

 

아이디어

A[i][j] 와 B[i][j] 가 다르다면 원소를 뒤집는 작업을 해야한다.

 

(0, 0) 부터 순회하며 A[i][j] 와 B[i][j] 가 다르면 A 의 원소를 뒤집는 작업을 하되 (i, j) 를 뒤집을 때 이전에 뒤집어서 맞춰놓은 곳에는 영향을 미치면 안 되기 때문에 (i, j) 가 3 x 3 부분 행렬의 첫 번째가 되도록 한다.

 

즉 (i, j) ~ (i + 2, j + 2) 까지 뒤집어야 하는데 3 x 3 의 범위가 원본 행렬의 범위를 넘어가면 뒤집을 수 없다.

 

 

풀이코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

    static int[][] A;
    static int[][] B;

    static int N;
    static int M;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());

        A = new int[N][M];
        for (int i = 0; i < N; i++) {
            String temp = br.readLine();
            for (int j = 0; j < M; j++) {
               A[i][j] = temp.charAt(j) - '0';
            }
        }

        B = new int[N][M];
        for (int i = 0; i < N; i++) {
            String temp = br.readLine();
            for (int j = 0; j < M; j++) {
                B[i][j] = temp.charAt(j) - '0';
            }
        }

        int cnt = 0;
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < M; j++) {
                if (A[i][j] != B[i][j]) {
                    flip(i, j);
                    cnt++;
                }
            }
        }

        for (int i = 0; i < N; i++) {
            for (int j = 0; j < M; j++) {
                if (A[i][j] != B[i][j]) {
                    cnt = -1;
                    break;
                }
            }
        }

        System.out.println(cnt);
    }

    public static void flip(int i, int j) {
        if (i + 2 >= N || j + 2 >= M) return;

        for (int k = i; k < i + 3; k++) {
            for (int l = j; l < j + 3; l++) {
                A[k][l] = (A[k][l] + 1) % 2;
            }
        }
    }
}

'Algorithm > 백준 알고리즘' 카테고리의 다른 글

20152번. Game Addiction  (1) 2023.11.01
16401번. 과자 나눠주기  (0) 2023.11.01
2876번. 그래픽스 퀴즈  (1) 2023.11.01
3085번. 사탕 게임  (0) 2023.11.01
1455번. 뒤집기 Ⅱ  (0) 2023.11.01
profile

개발 블로그

@하얀.손

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!