색종이 넓이를 구하는 문제이다.
복잡해 보이지만 겹치는 부분을 잘 생각하면 쉽게 해결할 수 있다.
아이디어 : 도화지를 100*100 이차원 배열로 생각해본다. 그 중 검은 색종이로 인해 채워진 부분만 다르게 나타내면
간단하게 면적을 구할 수 있다
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
int colorPaper = sc.nextInt();
//좌표를 입력받는 횟수
int arrT[][] = new int [100][100];
// 100*100 이차원 배열 생성
for(int i = 0; i < 100; i++) {
for(int j = 0; j < 100; j++) {
arrT[i][j] = 0;
}
}
//검은색 종이로 덮인 부분을 표시하기 위해 이차원 배열을 모두 0으로 채운다
for(int i = 0 ; i < colorPaper; i++) {
int x = sc.nextInt();
//왼쪽에서 x만큼 떨어진 것
int y = sc.nextInt();
//아래에서 y만큼 떨어진 것
int num1 = x;
int num2 = 100-y-10;
int num3 = x + 10;
int num4 = 100 -y;
//색종이 좌표를 계산하여 배열에 표시하기 위해 변수를 생성했다.
//(num1, num2)에서 (num3, num4)까지 배열에 채워진 0을 5로 바꾸어 색종이 영역을 표시한다.
for(int a = num2; a < num4; a++) {
for(int b = num1; b < num3; b++) {
arrT[a][b] = 5;
//이중 for문에서 안쪽이 배열의 가로, 밖이 배열의 세로임을 생각하며 반복문을 작성한다.
}
}
}
// for(int i = 0; i < 100; i++) {
// for(int j = 0; j < 100; j++) {
// System.out.print(arrT[i][j]);
// }
// System.out.println();
// }
// 테스트를 위한 문장으로 필요시 사용한다.
int count = 0;
// 색종이 영역을 세기 위한 count
for(int i = 0; i < 100; i++) {
for(int j = 0; j < 100; j++) {
if(arrT[i][j] == 5) {
count ++;
}
}
}
//배열 중 5인 부분만 골라 센다.
System.out.print(count);
}
}'java' 카테고리의 다른 글
| 백준 11005 진법변환2 10진수를 N진법으로 java 자바 (0) | 2024.01.11 |
|---|---|
| 백준 2745 진법계산기 자바 java (0) | 2024.01.11 |
| 백준 1316 그룹단어 자바 java (0) | 2024.01.10 |
| 백준 2941 크로아티아 (0) | 2024.01.09 |
| 백준 1157 단어 공부 자바 java 해시맵 사용 (0) | 2024.01.09 |