did_story

[๋ฐฑ์ค€ / JAVA] 1080๋ฒˆ, ํ–‰๋ ฌ (Greedy) ๋ณธ๋ฌธ

Algorithm๐ŸŒŠ/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€ / JAVA] 1080๋ฒˆ, ํ–‰๋ ฌ (Greedy)

์–ด์ œ์‹œ์ž‘ 2024. 12. 27. 14:56


ํ’€์ด

1. 3 x 3 ์ด ์•ˆ๋  ์‹œ์—๋Š” ๋’ค์ง‘์„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ๊ฐ™์€์ง€ ์•„๋‹Œ์ง€๋งŒ ํŒ๋‹จํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•˜์˜€๊ณ ,

2. 3 x 3 ์ด์ƒ์ด ๋  ์‹œ, 3x3 ํ–‰๋ ฌ์˜ ์ขŒ ์ƒ๋‹จ 1๊ฐœ ๋งŒ์„ ๋น„๊ตํ•ด์„œ ๋’ค์ง‘์–ด ์ค€๋‹ค. 

 ์™œ? ๊ทธ๋žฌ๋ƒ?

 - 3 x3 ํ–‰๋ ฌ ๋ณ€ํ™˜์ด ๋‹ค๋ฅธ ๋ถ€๋ถ„๊ณผ ๊ฒน์น  ๊ฐ€๋Šฅ์„ฑ์„ ์—†์• ๊ธฐ ์œ„ํ•ด์„œ,

 - ์—ฐ์‚ฐ ๋ฒ”์œ„๋ฅผ ํ•œ์ •ํ•˜์—ฌ ํšจ์œจ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ,

3. ์—ฐ์‚ฐ์ด ๋๋‚˜๊ณ  ์„œ๋กœ ๊ฐ™์ง€ ์•Š์œผ๋ฉด return -1 ๋! 

 


์†Œ์Šค ์ฝ”๋“œ

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

public class Main {
    static int n, m, answer;
    static int[][] matA;
    static int[][] matB;

    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());
        matA = new int[n][m];
        matB = new int[n][m];

        for (int i = 0; i < n; i++) {
            String str = br.readLine();
            for (int j = 0; j < str.length(); j++) {
                matA[i][j] = str.charAt(j) - '0';
            }
        }

        for (int i = 0; i < n; i++) {
            String str = br.readLine();
            for (int j = 0; j < str.length(); j++) {
                matB[i][j] = str.charAt(j) - '0';
            }
        }

        answer = solve();
        System.out.println(answer);
    }

    static int solve() {
        if (n < 3 || m < 3) {
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < m; j++) {
                    if (matA[i][j] != matB[i][j]) return -1;
                }
            }
            return 0;
        }

        int rate = 0;
        for (int i = 0; i <= n - 3; i++) {
            for (int j = 0; j <= m - 3; j++) {
                if (matA[i][j] != matB[i][j]) {
                    flip3x3(i, j);
                    rate++;
                }
            }
        }

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (matA[i][j] != matB[i][j]) return -1;
            }
        }

        return rate;
    }

    static void flip3x3(int x, int y) {
        for (int i = x; i < x + 3; i++) {
            for (int j = y; j < y + 3; j++) {
                matA[i][j] = 1 - matA[i][j];
            }
        }
    }
}