백준 알고리즘 - 2563번 : 색종이
백준 알고리즘 - 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이라면 카운트하여 더해준 후 최종 카운트 된 값을 리턴해줍니다.
이 값이 색종이가 붙은 검은영역의 넓이라 할 수 있습니다.