본문 바로가기

컴퓨터/백준

JAVA - 백준 알고리즘 - 1080 행렬

반응형

이 문제는 그리디 알고리즘으로 쉽게 풀 수 있는 문제이다.

 

두 개의 배열에 입력을 받고 0,0부터 차례대로 두 배열의 원소가 같은지 비교해주면 된다.

 

만약 배열의 원소가 같지 않다면 3x3에 해당되는 원소를 true에서 false로 , false에서 true로 바꿔주고

 

count를 1 증가시켜주면 된다.

 

배열의 인덱스 범위에 대해서 조금만 신경을 쓴다면 쉽게 맞을 수 있는 문제인 것 같다.

 

 


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

public class Main {

	static int N, M, count, temp;
	static boolean[][] arr1;
	static boolean[][] arr2;

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String str = br.readLine();

		StringTokenizer st = new StringTokenizer(str, " ");

		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
		arr1 = new boolean[N][M];
		arr2 = new boolean[N][M];

		for (int i = 0; N > i; ++i) {
			str = br.readLine();
			for (int j = 0; M > j; ++j) {
				if (str.charAt(j) - 48 == 0) {
					arr1[i][j] = false;
				} else {
					arr1[i][j] = true;
				}
			}
		}
		for (int i = 0; N > i; ++i) {
			str = br.readLine();
			for (int j = 0; M > j; ++j) {
				if (str.charAt(j) - 48 == 0) {
					arr2[i][j] = false;
				} else {
					arr2[i][j] = true;
				}
			}
		}

		for (int i = 0; N - 2 > i; ++i) {
			for (int j = 0; M - 2 > j; ++j) {
				if (arr1[i][j] != arr2[i][j]) {
					arr1[i][j] = !arr1[i][j];
					arr1[i + 1][j] = !arr1[i + 1][j];
					arr1[i + 2][j] = !arr1[i + 2][j];
					arr1[i][j + 1] = !arr1[i][j + 1];
					arr1[i + 1][j + 1] = !arr1[i + 1][j + 1];
					arr1[i + 2][j + 1] = !arr1[i + 2][j + 1];
					arr1[i][j + 2] = !arr1[i][j + 2];
					arr1[i + 1][j + 2] = !arr1[i + 1][j + 2];
					arr1[i + 2][j + 2] = !arr1[i + 2][j + 2];
					++count;
				}
			}
		}

		for (int i = 0; N > i; ++i) {
			for (int j = 0; M > j; ++j) {
				if (arr1[i][j] != arr2[i][j]) {
					temp++;
					break;
				}
			}
			if (temp > 0)
				break;
		}

		if (temp > 0) {
			System.out.print("-1");
		} else {
			System.out.println(count);
		}

	}

} 
반응형