반응형
반응형
문제
가로, 세로의 크기가 각각 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문으로 색이 칠해 졌을 때 카운트해서 출력만 하면 됩니다.
어때요 굉장히 쉽죠??
반응형
'백준 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 |