[C언어] 백준 2563 색종이
본문 바로가기

백준 C언어

[C언어] 백준 2563 색종이

728x90
반응형
반응형

문제

가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.

예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다.

입력

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

출력

첫째 줄에 색종이가 붙은 검은 영역의 넓이를 출력한다.

예제 입력 1 

3
3 7
15 7
5 2

예제 출력 1 

260
 
 
단순 반복 문제입니다.
이 문제는 상당히 쉬운편인데 그 이유는 "사각형의 넓이를 구하는 것" 이기 때문입니다.
사각형의 넓이를 구하는 공식은 가로 x 세로 입니다.
이 공식을 이용하면 가로 1, 세로 1의 정사각형의 넓이는 1이 됩니다.
따라서 저희는 단순히 반복만 해서 색종이가 서로 겹치는지도 상관없이 카운트만 해주면 되는겁니다.
 
 
 

전체 코드

#include <stdio.h>

int	t, x, y, result, black[101][101] = {};

void	draw(int x, int y)
{
	int	i;
	int	j;

	for(i = y; i < y + 10; i++)
	{
		for(j = x; j < x + 10; j++)
			black[i][j]++;
	}
}

int main(void)
{
	scanf("%d", &t);
	for(int i = 0; i < t; i++)
	{
		scanf("%d %d", &x, &y);
		draw(x, y);
	}
	result = 0;
	for(int i = 0; i < 101; i++)
	{
		for(int j = 0; j < 101; j++)
		{
			if (black[i][j])
				result++;
		}
	}
	printf("%d\n", result);
	return (0);
}

입력을 받을 때마다 색을 칠해주는 함수를 호출합니다.

이렇게 입력을 다 받아서 색을 칠했다면

이중 for문으로 색이 칠해 졌을 때 카운트해서 출력만 하면 됩니다.

 

어때요 굉장히 쉽죠??

728x90
반응형

'백준 C언어' 카테고리의 다른 글

[C언어] 백준 1012 유기농 배추  (0) 2023.01.03
[C언어] 백준 1439 뒤집기  (0) 2023.01.03
[C언어] 백준 1260 DFS와 BFS  (0) 2023.01.03
[C언어] 백준 10854 큐  (0) 2023.01.01
[C언어] 백준 1003 피보나치 함수  (0) 2023.01.01