[백준] 2571 색종이-3💫

0

백준

목록 보기
14/271
post-thumbnail

백준 2571 색종이-3

#include <iostream>
using namespace std;

int paper[101][101] = { 0 };

void colorPaper(int a, int b) {
	for (int i = 0; i < 10; ++i)
		for (int j = 0; j < 10; ++j)
			paper[a + i][b + j] = 1;
	return;
}


//size: 좌측 상단의 좌표가 paper[x][y-1]이고, 가로의 길이가 width인 직사각형의 최대 넓이  
int getSizeWithWidth(int x, int y, int width) {
	int size = width;
	bool flag = true;

	for (int i = x + 1; i <= 100; ++i) {
		for (int j = y - width; j < y; ++j) {
			if (paper[i][j] != 1) {
				flag = false;
				break;
			}
		}
		if (flag) size += width;
		else break;
	}
	return size;
}


//cand: 좌측 상단의 좌표가 paper[x][y]인 직사각형이 가질 수 있는 최대 넓이  
int getCand(int x, int y) {
	int cand;
	int width = 0;
	for (int j = y; j <= 100; ++j) {
		if (paper[x][j] == 1)
			width++;

		else if (width != 0) {
			cand = getSizeWithWidth(x, j, width);
			break;
		}
	}
	return cand;
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n;
	cin >> n;
	for (int i = 0; i < n; ++i) {
		int a, b;
		cin >> a >> b;
		colorPaper(a, b);
	}

	int result = 0;
	for(int i = 0; i < 100; ++i)
		for (int j = 0; j < 100; ++j) {
			if (paper[i][j] == 1) {
				int cand = getCand(i, j);
				if (result < cand)
					result = cand;
			}
		}
	cout << result;
	return 0;
}
profile
Be able to be vulnerable, in search of truth

0개의 댓글