[백준] 2563번 - 색종이 C++

문제
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다. 색종이의 수는 100 이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다
출력
첫째 줄에 색종이가 붙은 검은 영역의 넓이를 출력한다.

풀기전 로직 생각
  1. 100X100의 배열을 생성하고 0으로 초기화
  2. 색종이 갯수와 x y 좌표를 입력받고 좌표에서 x y로 10칸씩 1로 초기화
  3. 겹쳐도 1로 유지되기 때문에 다시 배열을 순환하여 1인것의 갯수를 카운트하면 그것이 넓이
#include <iostream>
using namespace std;

int area(int* arr) {

	return *arr;
}



int main(){

	int** arr = new int*[100]; //세로길이 할당
	for (int i = 0; i < 100; i++) { //가로길이 10씩 할당
		arr[i] = new int[100];
	}

	for (int i = 0; i < 100; i++) {
		for (int j = 0; j < 100; j++) {
			arr[i][j] = 0; //100X100 을 0으로 모두 초기화
		}
	}
	
	int colPaperNum; //색종이 갯수
	cin >> colPaperNum;

	int x, y; //x y좌표 입력
	for (int i = 0; i < colPaperNum; i++) {
		cin >> x >> y; //x y 좌표 입력
		for (int startX = x; startX < x+10; startX++) {
			for (int startY = y; startY < y+10; startY++) {
				arr[startX][startY]=1;
			}
		}
	} //x y 좌표로부터 10칸씩 1로 채우며 색종이를 붙인겉처럼 표현
	//겹쳐도 똑같이 1로 들어감.

	//1의 갯수 파악
	int count = 0; //1의 갯수 카운팅변수
	for (int i = 0; i < 100; i++) {
		for (int j = 0; j < 100; j++) {
			if (arr[i][j] == 1) {
				count++; //해당 배열이 1이면 카운트값 증가
			}
		}
	}

	cout << count; //출력
	
	return 0;
}

 

결과

 

 

 

이상입니다.