https://www.acmicpc.net/problem/1080
์ฝ๋
import java.util.Scanner;
public class Main {
static int N; // ํ
static int M; // ์ด
static int[][] aArr; // ํ๋ ฌ A
static int[][] bArr; // ํ๋ ฌ B
static int count = 0; // ์ฐ์ฐ์ ํ์
// 3*3 ๋ถ๋ถ ํ๋ ฌ์ ๋ชจ๋ ์์ ๋ค์ง๊ธฐ(0->1, 1->0)
public static boolean reverseArr(int row, int col){
// ์ ๋ฌ๋ฐ์ ์ธ๋ฑ์ค i, j๊ฐ ๋ณํํ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๋
if(row+3 > N || col+3 > M)
return false;
for(int i=row; i<row+3; i++) {
for(int j=col; j<col+3; j++) {
if(aArr[i][j] == 0)
aArr[i][j] = 1;
else
aArr[i][j] = 0;
}
}
return true;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
N = scan.nextInt();
M = scan.nextInt();
aArr = new int[N][M];
bArr = new int[N][M];
for(int i=0; i<N; i++) {
String str = scan.next();
for(int j=0; j<M; j++)
aArr[i][j] = str.charAt(j) - '0';
}
for(int i=0; i<N; i++) {
String str = scan.next();
for(int j=0; j<M; j++)
bArr[i][j] = str.charAt(j) - '0';
}
// (0,0)๋ถํฐ ์์๋ฅผ ์ผ์ผ์ด ๋น๊ตํด๊ฐ๋ฉฐ ๋ค๋ฅผ๊ฒฝ์ฐ reverseArr ๋ฉ์๋๋ฅผ ํตํด ์์ ๋ค์ง์.
// 3*3 ํฌ๊ธฐ์ ํ๋ ฌ์ด ๊ณ ์ ์ด๋ฏ๋ก, ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๋๊น์ง ๊ฐ์ง์์๊ฒฝ์ฐ, -1 ์ถ๋ ฅ
for(int i=0; i<N; i++) {
for(int j=0; j<M; j++) {
if(aArr[i][j] != bArr[i][j]) {
if(reverseArr(i, j)) {
count ++;
} else {
System.out.println("-1");
return;
}
}
}
}
System.out.println(count);
scan.close();
}
}
ํ์ด
๋ณ์๋ค์ ๋ค๋ฅธ ๋ฉ์๋์์ ์ฌ์ฉํ ์ ์๋๋ก ํด๋์ค ๋ณ์(static)๋ก ์ ์ธํ๋ค.
2์ฐจ์ ํ๋ ฌ A, B์ ๊ฐ๊ฐ์ ์์๋ค์ ์ค๋ฅธ์ชฝ ์๋๋ก ๊ฐ์ ๋น๊ตํด๊ฐ๋ฉด์ ๊ฐ์ด ๋ค๋ฅผ๋, ๋ถ๋ถ ํ๋ ฌ(3*3)์ ๋ชจ๋ ์์๋ค์ ๋ค์ง์ด ์ฃผ๋ฉด ๋๋ค.
๋ถ๋ถ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ 3*3์ด๋ฏ๋ก, i์ j๋ N-3, M-3 ๊น์ง๋ง ๋น๊ตํด์ฃผ๋ฉด ๋๋ค.
๋ง์ฝ N = 3 , M = 5์ธ 3 * 5 ์ธ ํ๋ ฌ์ด ์์๋,
A ํ๋ ฌ์
0 0 1 0 1
0 0 1 1 0
0 0 1 1 1 ์ด๊ณ ,
B ํ๋ ฌ์
0 0 1 0 0
0 0 1 1 0
0 0 1 0 0 ์ผ๋,
j(์ด)์ ๊ฐ์ ๊ฐ ํ๋ง๋ค 2๊น์ง๋ง ๋น๊ตํ๋ฉด ๋ ํ๋ ฌ์ด ์์๋ฅผ ๋ค์ง์์๋ ๊ฐ์์ง ๋ค๋ฅธ์ง ์ ์ ์๋ค.
์๋ํ๋ฉด 3*3์ธ ๋ถ๋ถ ๋ฐฐ์ด ์ด๋ฏ๋ก j=4 ์ผ๋ ๋ ํ๋ ฌ์ ์์๊ฐ ๋ค๋ฅด์ง๋ง, 3*3์ธ ๋ถ๋ถ ํ๋ ฌ์ ๋ค์ง์ ์๊ฐ ์๋ค.
๋ฐ๋ผ์ ๋ถ๋ถ ํ๋ ฌ์ ๋ชจ๋ ์์๋ฅผ ๋ค์ง๋ ๋ฉ์๋ reverseArr()๋ฅผ ํตํด ์์๋ฅผ ๋ค์ง๋๋ฐ, ์ด ๋
i, j์ ๊ฐ์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋ฌ์๋๋ false๋ก ๋ฆฌํดํ๊ณ , ๋ฒ์ ์์ผ๊ฒฝ์ฐ ํ๋ ฌ์ 3*3 ๋ถ๋ถ ํ๋ ฌ์ ๋ค์ง์ด์ค๋ค.
// 3*3 ๋ถ๋ถ ํ๋ ฌ์ ๋ชจ๋ ์์ ๋ค์ง๊ธฐ(0->1, 1->0)
public static boolean reverseArr(int row, int col){
// ์ ๋ฌ๋ฐ์ ์ธ๋ฑ์ค i, j๊ฐ ๋ณํํ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๋
if(row+3 > N || col+3 > M)
return false;
for(int i=row; i<row+3; i++) {
for(int j=col; j<col+3; j++) {
if(aArr[i][j] == 0)
aArr[i][j] = 1;
else
aArr[i][j] = 0;
}
}
return true;
}
main ๋ฉ์๋์์ ๋ ํ๋ ฌ A, B์ ๋ชจ๋ ์์๋ค์ ํ์ํ๋ฉด์ ๊ฐ์ด ๋ค๋ฅผ๊ฒฝ์ฐ ๋ถ๋ถ ํ๋ ฌ์ ์์๋ฅผ ๋ค์ง๊ณ ,
๋ง์ฝ ์์๋ฅผ ๋ค์ง์๋ ์ธ๋ฑ์ค์ ๋ฒ์์์ ๋ฒ์ด๋ฌ์๋๋ -1์ ์ถ๋ ฅํ๋ค.
// (0,0)๋ถํฐ ์์๋ฅผ ์ผ์ผ์ด ๋น๊ตํด๊ฐ๋ฉฐ ๋ค๋ฅผ๊ฒฝ์ฐ reverseArr ๋ฉ์๋๋ฅผ ํตํด ์์ ๋ค์ง์.
// 3*3 ํฌ๊ธฐ์ ํ๋ ฌ์ด ๊ณ ์ ์ด๋ฏ๋ก, ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๋๊น์ง ๊ฐ์ง์์๊ฒฝ์ฐ, -1 ์ถ๋ ฅ
for(int i=0; i<N; i++) {
for(int j=0; j<M; j++) {
if(aArr[i][j] != bArr[i][j]) {
if(reverseArr(i, j)) {
count ++;
} else {
System.out.println("-1");
return;
}
}
}
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1946๋ฒ: ์ ์ ์ฌ์(๊ทธ๋ฆฌ๋, ์ ๋ ฌ) (0) | 2020.01.29 |
---|---|
[๋ฐฑ์ค] 2903๋ฒ: ์ค์ ์ด๋ ์๊ณ ๋ฆฌ์ฆ (0) | 2020.01.29 |
[๋ฐฑ์ค] 2745๋ฒ: ์ง๋ฒ ๋ณํ (0) | 2020.01.28 |
[๋ฐฑ์ค] 1541๋ฒ: ์์ด๋ฒ๋ฆฐ ๊ดํธ(๊ทธ๋ฆฌ๋) (0) | 2020.01.26 |
[๋ฐฑ์ค] 1120๋ฒ: ๋ฌธ์์ด(๊ทธ๋ฆฌ๋) (0) | 2020.01.23 |
๋๊ธ