시간&메모리 제한
문제
입력&출력
문제
package com.Back;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Back_1080 {
static int ori[][];
static int cha[][];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
ori = new int[N][M];
cha = new int[N][M];
for (int i = 0; i < N; i++) {
String tmp=br.readLine();
for (int j = 0; j < M; j++) {
ori[i][j] = tmp.charAt(j)-'0';
}
}
for (int i = 0; i < N; i++) {
String tmp=br.readLine();
for (int j = 0; j < M; j++) {
cha[i][j] = tmp.charAt(j)-'0';
}
}
int ans = 0;
for (int i = 0; i < N - 2; i++) {
for (int j = 0; j < M - 2; j++) {
if (ori[i][j] != cha[i][j]) {
ans++;
change(i, j);
}
}
}
boolean flag = false;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if (ori[i][j] != cha[i][j]) {
System.out.println(-1);
flag = true;
break;
}
}
if (flag == true)
break;
}
if (flag == false) {
System.out.println(ans);
}
}
private static void change(int x, int y) {
for (int i = x; i <= x + 2; i++) {
for (int j = y; j <= y + 2; j++) {
ori[i][j] = 1 - ori[i][j];
}
}
}
}
이 문제는 그리디 알고리즘을 활용하는 문제입니다.
문제에 대한 해결 방법은 각 요소 별로 접근해서 다르다면 범위의 행렬을 모두 바꿔주면 됩니다.
순차적으로 진행했을 때, 원하는 배열의 형태가 아니면 -1을 출력하고 종료합니다.
원하는 배열의 형태인 경우에는 배열을 몇 번 바꿨는지 값을 출력해주면 됩니다.
'Algorithm > 백준 알고리즘' 카테고리의 다른 글
백준_12847 꿀 아르바이트(자바) / 누적 합 (0) | 2021.08.18 |
---|---|
백준_11441 합 구하기(자바) / 구간 합 (0) | 2021.08.17 |
백준_11497 통나무 건너뛰기(자바) / 그리디 (0) | 2021.08.12 |
백준_13305 주유소(자바) / 그리디 알고리즘 (0) | 2021.08.11 |
백준_11659 구간 합 구하기 4(자바) / 누적 합 (0) | 2021.08.11 |