๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’ป Computer Science/- Data Structure, Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜-PS] ๋ฐฑ์ค€ 1080๋ฒˆ ํ–‰๋ ฌ ์ž๋ฐ” ๋ฌธ์ œํ’€์ด

by Wonit 2021. 7. 13.

๋ฌธ์ œ

ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๋ฐฑ์ค€์˜ 1080๋ฒˆ ํ–‰๋ ฌ ์˜ ์ ‘๊ทผ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค.
์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด์ž.

 

๋ฌธ์ œ ์ ‘๊ทผ

 

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•˜๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

๋ฌธ์ œ์—์„œ๋Š” ์‹œ์ž‘ ํ–‰๋ ฌ๊ณผ ํƒ€๊นƒ ํ–‰๋ ฌ์„ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

 

3 by 3์˜ ๋ถ€๋ถ„ ํ–‰๋ ฌ ์„ ๋น„ํŠธ ๋ฐ˜์ „ ์‹œ์ผฐ์„ ๋•Œ, ์ตœ์†Œ ๋ช‡ ๋ฒˆ์˜ ๋ฐ˜์ „์„ ์‹œ์ผœ์•ผ ํƒ€๊นƒ ํ–‰๋ ฌ๊ณผ ๋™์ผํ•˜๊ฒŒ ๋˜๋Š”์ง€ ์ตœ์†Œ ํšŒ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

ํ•ด๊ฒฐ๋ฒ•

 

n by m ํ–‰๋ ฌ์ด ์žˆ๋‹ค๋ฉด ๋ฐฐ์—ด ์›์†Œ ํ•˜๋‚˜์”ฉ iteration ํ•˜๋ฉด์„œ start ํ–‰๋ ฌ๊ณผ target ํ–‰๋ ฌ์˜ ์›์†Œ๊ฐ€ ๋™์ผํ•˜๋‹ค๋ฉด ๋„˜์–ด๊ฐ€๊ณ  ๋™์ผํ•˜์ง€ ์•Š๋‹ค๋ฉด flip ํ•˜๋ฉด ๋œ๋‹ค.

 

์ •๋‹ต ์ฝ”๋“œ

 

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String[] nm = br.readLine().split(" ");

        int n = Integer.parseInt(nm[0]);
        int m = Integer.parseInt(nm[1]);

        int[][] start = new int[n][m];
        int[][] target = new int[n][m];

        for (int i = 0; i < n; i++) {
            String[] line = br.readLine().split("");
            for (int j = 0; j < m; j++) {
                start[i][j] = Integer.parseInt(line[j]);
            }
        }
        for (int i = 0; i < n; i++) {
            String[] line = br.readLine().split("");
            for (int j = 0; j < m; j++) {
                target[i][j] = Integer.parseInt(line[j]);
            }
        }

        int answer = 0;

        if(n < 3 || m < 3) {
            if(Arrays.deepEquals(start, target)) {
                bw.write("0");
            }else {
                bw.write("-1");
            }
            bw.flush();            
            return;
        }

        boolean flag = false;

        if(Arrays.deepEquals(start, target)) {
            flag = true;
        }else {
            mainLoop: for (int i = 0; i < n - 2; i++) {

                for (int j = 0; j < m - 2; j++) {

                    if(start[i][j] != target[i][j]) {
                        for (int k = i; k <= i + 2; k++) {
                            for (int l = j; l <= j + 2; l++) {
                                start[k][l] = (start[k][l] == 1) ? 0 : 1;
                            }
                        }
                        answer++;
                    }

                    if(Arrays.deepEquals(start, target)) {
                        flag = true;
                        break mainLoop;
                    }
                }
            }
        }

        // count ์ถœ๋ ฅ
        if(flag && Arrays.deepEquals(start, target)) {
            bw.write(String.valueOf(answer));
        }else {
            bw.write("-1");
        }

        bw.flush();
        bw.close();
    }
}

์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€