https://www.acmicpc.net/problem/10163
1. 아이디어
영역을 2차원 배열로 나타내고 색종이를 덮는 걸 배열에 값을 채우는 것으로 생각하면 새로운 값으로 기존 값이 덮어지므로 각 색종이의 영역을 구할 수 있다.
2. 문제풀이
문제 조건에 맞게 1001칸의 2차원 배열을 선언한 이후 for문의 인덱스를 활용해서 색종이 번호에 해당하는 칸들을 채워줬다. 이때 색종이의 한 점과 너비, 높이 정보로 2차원 배열에서 색종이를 채울 영역의 위치를 구할 수 있는 점을 활용해서 구현했다. 이후 카운팅 배열을 통해 각 색종이의 넓이를 구하면 된다.
3. 코드
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));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
int[][] map = new int[1001][1001];
for (int i = 1; i <= N; i++) {
st = new StringTokenizer(br.readLine());
int r1 = Integer.parseInt(st.nextToken());
int c1 = Integer.parseInt(st.nextToken());
int r2 = r1 + Integer.parseInt(st.nextToken()) - 1;
int c2 = c1 + Integer.parseInt(st.nextToken()) - 1;
for (int r = r1; r <= r2; r++) {
for (int c = c1; c <= c2; c++) {
map[r][c] = i;
}
}
}
int[] cntArr = new int[1 + N];
for (int i = 0; i <= 1000; i++) {
for (int j = 0; j <= 1000; j++) {
cntArr[map[i][j]]++;
}
}
for (int i = 1; i <= N; i++) {
sb.append(cntArr[i]).append("\n");
}
bw.write(sb.toString());
bw.flush();
}
}
4. 후기
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 10811번 - 바구니 뒤집기 [Java] (0) | 2025.01.17 |
---|---|
[백준] 2935번 - 소음 [Java] (0) | 2025.01.16 |
[백준] 10984번 - 내 학점을 구해줘 [Java] (0) | 2025.01.16 |
[백준] 10156번 - 과자 [Java] (0) | 2025.01.16 |
[백준] 9325번 - 얼마? [Java] (0) | 2025.01.16 |