코딩테스트/Java
[BaekJoon][자료 구조][Stack][Java] 2563: 색종이
프린이8549
2024. 8. 10. 21:42
1. 핵심 아이디어
1X1의 정사각형으로 이루어진 100X100 흰색 도화지를 boolean형 2차원 배열로 가정할 때, 검은 영역일 경우 true 처리
2. 풀이
package BOJ.dataStructure.stack;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ2563 {
// 도화지
private static boolean[][] arr;
// 색종이 개수
private static int n;
// 검은 영역의 넓이
private static int total;
/**
* 검은 영역의 갯수를 세는 메소드
* 하나의 좌표는 1x1 박스 한 개를 나타낸다고 가정(x,y 는 자연수).
* @param x
* @param y
*/
public static void count(int x, int y) {
//(x,y)부터 (x+9, y+9)까지의 영역을 하나씩 체크한 후 총 넓이에 더해준다
// * x+10, y+10 의 영역을 계산하면 박스가 11x11 개가 되버림
for (int j = x; j < x+10; j++) {
for (int k = y; k < y+10; k++) {
//불린형 이차원 배열이 false(=흰색)일 경우 카운트함
if (!arr[j][k]) {
// 이미 검은 영역을 또 카운트하지 않도록 카운트하면서 상태값을 true(=검은색)로 변경
total++;
arr[j][k] = true;
}
}
}
}
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
total = 0; //검은 영역의 넓이
n = Integer.parseInt(br.readLine()); //색종이 개수
arr = new boolean[100][100]; //100x100 도화지. boolean 형의 기본값은 false(=흰색 영역).
while (n-- > 0) {
StringTokenizer st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
count(x, y);
}
br.close();
System.out.print(total);
}
}