학습 정리/👨‍💻 PS Study

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

무딘붓 2023. 1. 4. 15:07

https://www.acmicpc.net/problem/2563

 

2563번: 색종이

가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록

www.acmicpc.net

[소스코드]

#include <iostream>
using namespace std;
// [baekjoon] 2563번 - 색종이
// 2023.01.04

int main() {
	int arr[101][101] = { 0 };
	int n, a, b;
	int area = 0;

	cin >> n;
	for (int k = 0; k < n; k++) {
		cin >> a >> b;

		for (int i = a; i < a + 10; i++) {
			for (int j = b; j < b + 10; j++) {
				if (arr[i][j] == 0) {
					arr[i][j] = 1;
					area++;
				}
			}
		}

	}

	cout << area;
	
	return 0;
}

이차원 배열을 이용하면 쉽게 해결할 수 있는 문제다.

도화지를 1*1 크기의 정사각형 100*100개로 생각하면 이차원 배열로 만들 수 있다.

해당 영역에 색종이가 안붙어있으면 0, 붙어있으면 1로 생각하면 된다.

 

색종이의 위치를 입력 받고, 해당 위치에 색종이가 붙어있지 않으면 (=0) 색종이를 붙이고 (= 1로 바꾸기), 영역 크기를 1 더해주면 된다. 색종이가 붙어있는 경우는 그냥 넘어가도 된다 (겹치는 경우는 영역 계산에 추가로 더해지지 않으므로)