728x90
https://www.acmicpc.net/problem/2563
문제해석
- 처음 주어지는 도화지 전체를 0으로 간주하고 색종이 부분은 1로 바꾸어 색종이 부분인 1을 세어주어 색종이 전체 넓이를 구한다.
소스코드
#include <stdio.h>
int main(void)
{
int dpaper[100][100] = { 0, };
int n, x, y;
int count = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d %d", &x, &y);
for (int j = 100 - (y + 10); j < 100 - y; j++) {
for (int k = x; k < x + 10; k++) {
dpaper[j][k] = 1;
}
}
}
for (int i = 0; i < 100; i++) {
for (int j = 0; j < 100; j++) {
if (dpaper[i][j] == 1)
count++;
}
}
printf("%d", count);
return 0;
}
문제풀이
- int dpaper[100][100] = {0, } : 가로세로 크기가 100인 정사각형 모양의 흰색 도화지를 0으로 채워줍니다.
- n = 정사각형의 개수, x = 색종이의 가로 시작부분, y = 색종이의 세로 시작부분, count = 색종이들로 채워진 부분
- 반복문과 조건문을 이용해 값을 구해줍니다.
for (int i = 0; i < n; i++) { //입력한 수만큼 정사각형을 형성한다는 반복문
scanf("%d %d", &x, &y);
for (int j = 100 - (y + 10); j < 100 - y; j++) { //정사각형의 입력받은 세로시작부분에서 10번 반복되는 동안
for (int k = x; k < x + 10; k++) { //정사각형의 입력받은 가로시작부분에서 10번 반복됩니다
dpaper[j][k] = 1; //반복되는 동안 가로 세로에다 도화지 값0을 색종이 부분 1로 값을 바꾸어줍니다
}
}
}
for (int i = 0; i < 100; i++) { //가로 또는 세로 100번 반복하는 동안
for (int j = 0; j < 100; j++) { //세로 또는 가로 100번 반복합니다
if (dpaper[i][j] == 1) //조건문을 통해 도화지에 색종이로 채워진 부분이 1이면
count++; //반복하여 값을 세어 색종이의 넓이를 구합니다 => 이후 printf() 함수를 통해 출력합니다
}
}
예제
728x90
'백준(BaekJoon)' 카테고리의 다른 글
[BaekJoon/C] No.10872 : 팩토리얼 (0) | 2024.05.23 |
---|---|
[BaekJoon/C] No.2566 : 최댓값 (0) | 2024.05.17 |
[BaekJoon/C] No.2908 : 상수 (0) | 2024.05.15 |
[BaekJoon/C] No.10809 : 알파벳 찾기 (0) | 2024.05.15 |
[BaekJoon/C] No.10988 : 팰린드롬인지 확인하기 (0) | 2024.05.08 |