문제
https://www.acmicpc.net/problem/2563
가로세로 100 크기의 도화지 위에 가로세로 10 크기의 검은색 색종이들을 붙였을 때 검은 영역의 총 넓이를 구하는 문제였다.
문제 풀이
이 문제를 수학적으로 푼다면 겹치는 범위의 사각형의 넓이를 구해 전체 검은색 영역에서 빼주면 되는 문제다. 하지만 이걸 코드로 구현하는 게 너무 어려웠다. 그래서 다른 사람들이 작성한 코드를 참고해서 문제를 풀었다(T_T)
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
boolean[][] array = new boolean[100][100];
int result=0;
for (int i = 0; i < N; i++) {
StringTokenizer t=new StringTokenizer(br.readLine(), " ");
int x = Integer.parseInt(t.nextToken());
int y = Integer.parseInt(t.nextToken());
for(int j=x; j<x+10; j++) {
for(int k=y; k<y+10; k++) {
array[j][k]=true;
}
}
}
for(int i=0;i<100;i++){
for(int j=0;j<100;j++){
if(array[i][j]){
result++;
}
}
}
System.out.println(result);
}
}
이 코드는 100x100 배열을 통해 사각형을 그린 후, 그 사각형들이 차지하는 면적을 계산하여 출력한다. 배열의 값으로 boolean을 사용하여 각 위치의 상태를 관리함으로써, 겹치는 부분도 자동으로 처리할 수 있게 된다!
'코딩테스트 > 백준' 카테고리의 다른 글
[백준/JAVA]11005번 진법 변환 2 (0) | 2025.03.19 |
---|---|
[백준/JAVA]2745번 진법 변환 (0) | 2025.01.24 |
[백준/JAVA]10798번 세로읽기 (0) | 2025.01.24 |
[백준/JAVA]2566번 최댓값 (0) | 2025.01.23 |
[백준/JAVA]2738번 행렬 덧셈 (0) | 2025.01.23 |