문제
https://www.acmicpc.net/problem/2563
2563번: 색종이
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록
www.acmicpc.net
100 * 100 도화지에 10 * 10 색종이를 각 변이 평행하도록 붙인다.
색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 넓이를 구하는 문제이다.
색종이는 100장 이하 붙일 수 있으며, 색종이는 도화지 밖으로 나가지 않는다.
풀이
처음엔 다른 방법을 생각 못 하고 당연히 모든 색종이의 넓이 - 겹치는 부분의 넓이를 구하려고 했다.
하지만 이렇게 접근하니 최대 100개가 겹치는 경우까지 고려해야 해서 구현이 너무 어려웠다.
쉬운 방법 :
boolean[100][100]의 배열을 선언한다.
입력받은 위치에서 가로 세로 10만큼의 범위를 모두 true로 만든다.
true의 개수를 카운트한다.
코드
import java.util.*;
import java.io.*;
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));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
int count = 0;
boolean[][] arr = new boolean[100][100];
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
for(int j1=n; j1<n+10; j1++) {
for(int j2=m; j2<m+10; j2++) {
arr[j1][j2] = true;
}
}
}
for(int i=0; i<100; i++) {
for(int j=0; j<100; j++) {
if(arr[i][j] == true)
count++;
}
}
bw.write(count + " ");
bw.close();
}
}
'BOJ' 카테고리의 다른 글
[백준 2720번/JAVA] 세탁소 사장 동혁 (0) | 2024.03.17 |
---|---|
[백준 2745번/JAVA] 진법 변환 (0) | 2024.03.14 |
[백준 2566번/JAVA] 최댓값 | 이차원 배열 (3) | 2024.03.14 |
[백준 10798/JAVA] 세로읽기 (0) | 2024.03.14 |
[백준 2738번/JAVA] 행렬 덧셈 (0) | 2024.03.13 |