백준 알고리즘 - 2563번 색종이 문제입니다.


(참고 - https://www.acmicpc.net/problem/2563)



코드)

#include <stdio.h>

int arr[100][100];

void put_rect(int i, int j) {

   int k, p;

   int tmp = j;

   for (k = 0; k < 10; k++) {

      j = tmp;

      for(p = 0; p < 10; p++) {

         arr[i][j] = 1;

         j++;

      }

      i++;

   }

}


int calc_rect_size()

{

   int i, j, cnt = 0;

   for(i = 0; i < 100; i++)

      for(j = 0; j < 100; j++)

         if( arr[i][j] )

            cnt++;

   return cnt;

}

int main(int argc, char* argv[]) {

   int i, num, tmp1, tmp2;

   scanf("%d", &num);

   for(i = 0; i < num; i++) {

      scanf("%d %d", &tmp1, &tmp2);

      put_rect(tmp1, tmp2);

   }

   printf("%d\n", calc_rect_size());

}


- 먼저 전역변수로 2차원배열 arr를 100, 100의 크기만큼 선언하여 0으로 초기화 해줍니다.

그 후 두 수(tmp1, tmp2)를 입력받아 put_rect 함수의 변수로 넘겨줍니다.

put_rect함수에서는 입력받은 두 수가 예를 들어 3, 7이라 가정하면 arr[3][7] 부터 위, 오른쪽의 방향으로 10만큼 전부 1의 값으로 바꿔줍니다.

그렇게 되면 알기쉽게 표현하면 arr[3~13][7~17]에 저장된 값들은 전부 1, 나머지는 전부 0으로 배열 arr이 저장됩니다.

이와 같은 식으로 main의 for문을 통해 입력 받는 두 수에 대하여 배열 arr의 값을 1로 바꿔줍니다.

결과적으로 calc_rect_size함수에서는 배열 arr에 저장된 값을 1인지, 0인지를 비교하여 1이라면 카운트하여 더해준 후 최종 카운트 된 값을 리턴해줍니다.

이 값이 색종이가 붙은 검은영역의 넓이라 할 수 있습니다.


WRITTEN BY
SiriusJ

,