Notice
Recent Posts
Recent Comments
Link
Dev.baelanche
[백준 1080] 행렬 본문
반응형
감이 안와서 질문게시판을 참고했다.
1. 행렬 A, B 를 비교한 정보를 담은 배열 C를 만든다. (일치하면 false, 불일치하면 true 로 진행했다.)
2. 0, 0 부터 n-3, m-3 까지 3*3 크기로 탐색한다.
- 탐색이 끝났을때 C의 각 배열 정보가 모두 일치해야 문제의 조건을 만족한다.
2-1. 탐색할때 첫번째 인덱스가 false(일치)라면 원소 값을 뒤집을 필요 없다.
글로만 쓰자니 힘들어서 주석을 달아놓았다.
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
char a[][] = new char[n][m];
boolean b[][] = new boolean[n][m]; //A, B를 비교한 정보를 담은 배열
for(int i=0; i<n; i++) {
st = new StringTokenizer(br.readLine());
a[i] = st.nextToken().toCharArray();
}
boolean d = true;
for(int i=0; i<n; i++) {
st = new StringTokenizer(br.readLine());
char temp[] = st.nextToken().toCharArray();
for(int j=0; j<m; j++) {
if(a[i][j] != temp[j]) {
b[i][j] = true;
d = false;
}
else b[i][j] = false;
}
}
//A, B가 모두 일치했을때 0출력
if(d) System.out.println(0);
else {
//3*3보다 작을때
if(n < 3 || m < 3) System.out.println(-1);
else {
int cnt = 0;
for(int i=0; i<=n-3; i++) {
for(int j=0; j<=m-3; j++) {
//b[i][j] 가 true(불일치)이면 change를 진행한다
if(b[i][j]) {
change(b, i, j);
cnt++;
}
}
}
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
if(b[i][j]) {
System.out.println(-1);
return;
}
}
}
System.out.println(cnt);
}
}
}
public static void change(boolean b[][], int x, int y) {
for(int i=x; i<x+3; i++) {
for(int j=y; j<y+3; j++) {
b[i][j] = !b[i][j];
}
}
}
}
n, m 이 3보다 작을때와 배열이 처음부터 일치할때만 신경써주면 된다.
반응형
'Data Structure & Algorithm > PS - JAVA' 카테고리의 다른 글
[백준 2108] 통계학 (0) | 2019.06.08 |
---|---|
[백준 9020] 골드바흐의 추측 (0) | 2019.06.08 |
[백준 1541] 잃어버린 괄호 (0) | 2019.06.03 |
[백준 1049] 기타줄 (0) | 2019.05.31 |
[백준 1946] 신입 사원 (0) | 2019.05.31 |
Comments