문제 이해
문제를 이해하는 것은 쉬웠다.
첫 줄에 색종이의 개수가 입력되고, 색종이의 넓이는 100으로 정해져있기 때문에,
(색종이의 개수 * 100) - 겹치는 부분 으로 구하면 될 것이라고 생각했다.
그럼 중복된 부분의 넓이를 어떻게 구하면 될까?
2차원 배열을 boolean 타입으로 만들어준 후, 이미 체크가 된 부분이면 중복된 부분이라고 생각하면 된다.
그럼 차근차근 코드를 작성해보자.
문제 해결
우선 첫 번째 줄에 입력되는 색종이 개수를 입력받은 후 변수에 저장해준다.
Scanner in = new Scanner(System.in);
int paperCount = in.nextInt(); //색종이 개수
그 이후 입력받을 x,y좌표에 해당하는 변수와, 중복되는 부분을 저장해줄 변수를 선언하고 초기화해준다.
또한 위에서 언급했던 것처럼 2차원 배열을 boolean 타입으로 만들어준다. (흰색 도화지는 가로, 세로 각각 100, 100)
int x = 0;
int y = 0;
int duplicateArea = 0;
boolean[][] paper = new boolean[100][100];
전체 반복문은 색종이의 개수만큼 반복해주면 되고, 그 반복문 안에서는 각각 입력받은 x, y좌표에서 10을 더한만큼 반복해주면 된다. (색종이의 가로, 세로는 각각 10이므로)
만약 paper[j][k]가 false이면, 아직 체크되지 않았다고 보며, 이를 true로 만들어준다.
그럼 true는 이미 체크가 된 상태를 의미한다. 즉 true일 경우, 이를 중복된 부분이라고 보며, duplicateArea를 증가시킨다.
for(int i = 0; i < paperCount; i++) {
x = in.nextInt();
y = in.nextInt();
for (int j = x; j < x+10; j++) {
for (int k = y; k < y+10; k++) {
if(paper[j][k]) { // 이미 ture이면
duplicateArea++; //중복되는 부분 넓이 증가
} else {
paper[j][k] = true; //중복되지 않으면, 해당 부분을 true로 체크해두기.
}
}
}
}
색종이 개수만큼 반복이 왼료됐다면, duplicateArea 변수에는 총 중복된 부분의 넓이가 저장되어있을 것이다.
즉 색종이 개수 (paperCount)에서100을 곱한 후, 중복된 부분의 넓이를 빼주면 끝이다~!
int totalArea = paperCount * 100 - duplicateArea;
System.out.println(totalArea);
최종 코드
import java.util.Scanner;
public class ColoredPaper {
// (100 x 색종이 개수) - 중복 되는 부분
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int paperCount = in.nextInt(); //색종이 개수
int x = 0;
int y = 0;
int duplicateArea = 0;
boolean[][] paper = new boolean[100][100];
for(int i = 0; i < paperCount; i++) {
x = in.nextInt();
y = in.nextInt();
for (int j = x; j < x+10; j++) {
for (int k = y; k < y+10; k++) {
if(paper[j][k]) { // 이미 ture이면
duplicateArea++; //중복되는 부분 넓이 증가
} else {
paper[j][k] = true; //중복되지 않으면, 해당 부분을 true로 체크해두기.
}
}
}
}
int totalArea = paperCount * 100 - duplicateArea;
System.out.println(totalArea);
}
}
'백준 문제 풀이 > 2차원 배열' 카테고리의 다른 글
(#10798 Java) 세로읽기 (0) | 2024.02.24 |
---|---|
(#2566 Java) 최댓값 (0) | 2024.02.23 |
(#2738 Java) 행렬 덧셈 (1) | 2024.02.23 |