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 |
댓글