본문 바로가기
Computer Science/Problem Solving(Algorithm)

< BOJ > 2571 - 색종이-3

by 진뚱 2019. 6. 4.
728x90

수정 필

 

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

 

2571번: 색종이 - 3

첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다. 색종이의 수는 100이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다.

www.acmicpc.net

 

#include <stdio.h>

#define SIZE_PAPER (100)

int paper[SIZE_PAPER][SIZE_PAPER];

void Mark_Paper(int sr, int sc)
{
	int r, c;
	for (r = sr; r < sr + 10; r++)
	{
		for (c = sc; c < sc + 10; c++)
		{
			paper[r][c] = 1;
		}
	}
}


void Input_Data(void)
{
	int N;
	int i, sc, sr;
	scanf("%d", &N);
	for (i = 0; i < N; i++)
	{
		scanf("%d %d", &sc, &sr);
		Mark_Paper(sr, sc);
	}

}

void Make_Height_Info(void)
{
	int r, c;
	for (r = 1; r < SIZE_PAPER; r++)
	{
		for (c = 0; c < SIZE_PAPER; c++)
		{
			if (paper[r][c] == 1) paper[r][c] = paper[r - 1][c] + 1;
		}
	}
}

int Get_Max_Area(void)
{
	int area;
	int max_area = 0;
	int r, sc, ec, h;

	for (r = 0; r < SIZE_PAPER; r++)
	{
		for (sc = 0; sc < SIZE_PAPER; sc++)
		{
			h = 0x7fffffff;
			for (ec = sc; ec < SIZE_PAPER; ec++)
			{
				if (h > paper[r][ec]) h = paper[r][ec];
				if (h == 0) break;
				area = h * (ec - sc + 1);
				if (max_area < area) max_area = area;
			}
		}
	}
	return max_area;
}


int main(void)
{
	Input_Data();

	Make_Height_Info();

	printf("%d\n", Get_Max_Area());

	return 0;
}

 

728x90

'Computer Science > Problem Solving(Algorithm)' 카테고리의 다른 글

<BOJ> 팩토리얼 (10872)  (0) 2021.03.31
< BOJ > 9934 - 완전 이진 트리  (0) 2019.06.06
< BOJ > 1912 - 연속합  (0) 2019.06.02
< BOJ > 10828 - 스택  (0) 2019.06.02
< BOJ > 1406 - 에디터  (0) 2019.06.02

댓글