#include <stdio.h>
#define SIZE 100
int main() {
int N, M;
int paper[SIZE + 1][SIZE + 1] = {0};
scanf("%d %d", &N, &M);
for (int i = 0; i < N; i++) {
int x1, y1, x2, y2;
scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
for (int x = x1; x <= x2; x++) {
for (int y = y1; y <= y2; y++) {
paper[x][y]++;
}
}
}
int count = 0;
for (int x = 1; x <= SIZE; x++) {
for (int y = 1; y <= SIZE; y++) {
if (paper[x][y] > M) {
count++;
}
}
}
printf("%d\n", count);
return 0;
}
1.첫번째로 for문을 돌리면서 각각 종이에 얼마나 가려져 있는지 세어봅니다.
1-2. 세로 한 줄을 입력 받을 때 마다 얼마나 가려져있는지 2중으로 세는 방식입니다.
1-3.이 떄 paper에 저장되는 값은 가려진 부분입니다.
2. 이번에는 가려지지 않은 부분을 셉니다.
2-1.만약 paper에 저장된 값이 1보다 클 경우에, count(가려지지 않은 부분을 증가시킵니다.
3.출력합니다
#include <stdio.h>
int main() {
int first;
scanf("%d", &first);
int max_length = 0;
int array[30000];
for (int second = 1; second <= first; second++) {
int temp_array[30000];
int length = 2;
temp_array[0] = first;
temp_array[1] = second;
while (temp_array[length - 2] - temp_array[length - 1] >= 0) {
temp_array[length] = temp_array[length - 2] - temp_array[length - 1];
length++;
}
if (length > max_length) {
max_length = length;
for (int i = 0; i < length; i++) {
array[i] = temp_array[i];
}
}
}
printf("%d\n", max_length);
for (int i = 0; i < max_length; i++) {
printf("%d ", array[i]);
}
printf("\n");
return 0;
}
1. for(int second = 1; second <= first; second++)부분에서 두번째 수를 1로 가정하고 실행해봅니다.
2.1번 과정을 한 번 거쳤으니 temp_array[0] = first; temp_array[1] = second;이 부분으로 다시 초기화 해줍니다.
3.while문에서 규칙에 따라 수열을 생성해주기 시작합니다.
3-1.이때 최대 길이가 길어지면 if에 저장을 해서 최대 길이를 갱신해줍니다.
4.만약 음수가 나올 경우 while문을 빠져나옵니다.
5.결과를 출력합니다.