백준(BaekJoon)

[BaekJoon/C] No.2563 : 색종이

ekdnjs510 2024. 5. 17. 13:12
728x90

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

No.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;
}

문제풀이

  1. int dpaper[100][100] = {0, } : 가로세로 크기가 100인 정사각형 모양의 흰색 도화지를 0으로 채워줍니다.
  2. n = 정사각형의 개수, x = 색종이의 가로 시작부분, y = 색종이의 세로 시작부분, count = 색종이들로 채워진 부분
  3. 반복문과 조건문을 이용해 값을 구해줍니다.
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