문제: https://www.acmicpc.net/problem/1018
이차원 배열에서 8 x 8 크기를 가진 정사각형을 잡는다. 그리고 해당 정사각형에서 흰색과 검은색이 번갈아 나오도록 정사각형 내부의 원소 값을 수정한다. 이차원 배열에서 쪼갤 수 있는 8 x 8 정사각형 중 가장 적은 횟수로 수정할 수 있는 정사각형을 찾고 수정한 횟수를 출력한다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
//import java.io.FileInputStream;
public class Main {
public static boolean[][] arr;
public static int min = 64;
public static void main(String[] args) throws IOException {
// System.setIn(new FileInputStream("input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int max_y = Integer.parseInt(st.nextToken());
int max_x = Integer.parseInt(st.nextToken());
boolean[][] board = new boolean[max_y][max_x];
for (int y = 0; y < max_y; y++) {
String str = br.readLine();
for (int x = 0; x < max_x; x++) {
if (str.charAt(x) == 'W') {
board[y][x] = true;
} else {
board[y][x] = false;
}
}
}
int max_start_y = max_y - 7;
int max_start_x = max_x - 7;
int min = 99999999;
for (int y = 0; y < max_start_y; y++) {
for (int x = 0; x < max_start_x; x++) {
min = Math.min(min, calculate(board, false, y, x));
min = Math.min(min, calculate(board, true, y, x));
}
}
System.out.println(min);
}
public static int calculate(boolean[][] board, boolean current, int start_y, int start_x) {
int count = 0;
int end_y = start_y + 8;
int end_x = start_x + 8;
for (int y = start_y; y < end_y; y++) {
for (int x = start_x; x < end_x; x++) {
if (current == board[y][x]) {
count += 1;
}
current = (!current);
}
current = (!current);
}
return count;
}
}
- | Python | Java |
---|---|---|
Difficult | 쉬움 | 어려움 |
Readability | 쉬움 | 어려움 |
Annoying | 간단함 | 귀찮음 |
Debugging | 비교적 어려움? | 쉬움 |
지금까지 파이썬으로 문제풀다가 처음으로 자바를 이용해봤는데 체감상 훨씬 어려웠다.
javac
컴파일할 때 typo 찾는건 좋네앞으로 spring 프레임워크 공부해볼건데 자바 문법좀 익숙해졌으면 좋겠다