반응형
https://www.acmicpc.net/problem/2563
- 문제
- 문제 풀이
백준 2563번 색종이는 브론즈 1 난이도의 구현 문제이다. 이 문제에서는 가로, 세로 크기각 각각 100인 도화지가 하나 있다. 그리고 이 도화지 위에 가로, 세로 크기가 각각 10인 색종이 N개를 겹쳐도 되도록 붙인다. 이때 이 색종이들이 차지하는 총넓이를 구하면 된다.
이 문제를 수학적으로 구할 수 있겠으나 이 글에서는 수학적인 방법 말고 원초적으로 풀어보려고 한다. 우선 이 도화지를 나타낼 boolean형 배열을 크기가 [101][101]인 배열 arr을 선언한다. 만약에 어떤 수 x, y에 대해 arr [x][y]가 true면 그 부분은 색종이가 붙어져 있다는 것을 뜻한다.
for-loop을 이용해서 색종이 N개를 입력받는다. 그리고 색종이의 왼쪽 변의 점 x, y가 주어지면 (x, y)부터 (x + 9, y + 9)까지 색종이가 붙어져 있다는 것을 의미한다. 따라서 이중 for-loop을 이용해 arr [x][y]부터 arr [x+9][y+9]를 true로 시켜준다. 그리고 맨 마지막에 true인 개수를 출력하면 된다.
자세한 코드는 밑에 있다.
- 코드
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 total = 0; //검은 영역의 넓이
int n = Integer.parseInt(br.readLine()); //색종이 개수
boolean[][] arr = new boolean[101][101]; //도화지
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
//(x,y)부터 (x+9, y+9)까지의 영역을 하나씩 체크한 후 총 넓이에 더해준다
for (int j = x; j < x+10; j++) {
for (int k = y; k < y+10; k++) {
if (!arr[j][k]) {
arr[j][k] = true;
total++;
}
}
}
}
System.out.print(total);
}
}
반응형
'백준' 카테고리의 다른 글
[백준] 15733번 : 나는 누구인가 – JAVA [자바] (0) | 2022.08.09 |
---|---|
[백준] 10996번 : 별 찍기 - 21 – JAVA [자바] (0) | 2022.08.08 |
[백준] 4796번 : 캠핑 – JAVA [자바] (0) | 2022.08.08 |
[백준] 10798번 : 세로읽기 – JAVA [자바] (0) | 2022.08.08 |
[백준] 1076번 : 저항 – JAVA [자바] (0) | 2022.08.08 |
댓글