#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int** watering_can, int watering_can_row_len, int watering_can_col_len, int N, int M) { 
    const int NO_WATER = 0;
	const int WATER = 1;

	int answer = 0;

	int** garden = (int**)malloc(sizeof(int*) * N);
	for (int i = 0; i < N; i++) {
		garden[i] = (int*)malloc(sizeof(int) * N);
	}

	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			garden[i][j] = 0;
		}
	}

	for (int i = 0; i < M; i++) {
		int* can = watering_can[i];
		garden[can[0]][can[1]] = 1;
		for (int j = 1; j < can[2]; j++) {
			if (can[0] + j < N) {
				garden[can[0] + j][can[1]] = WATER;
			}
			if (can[0] - j >= 0) {
				garden[can[0] - j][can[1]] = WATER;
			}
			if (can[1] + j < N) {
				garden[can[0]][can[1] + j] = WATER;
			}
			if (can[1] - j >= 0) {
				garden[can[0]][can[1] - j] = WATER;
			}
		}
	}

	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			if (garden[i][j] == NO_WATER) {
				answer += 1;
			}
		}
	}

	return answer;
}

// 아래는 테스트케이스 출력을 해보기 위한 main 함수입니다. 
// 아래에는 잘못된 부분이 없으니 위의 코드만 수정하세요.

int main() {
    int watering_can1_row_len = 2;
	int watering_can1_col_len = 3;
    int M1 = watering_can1_row_len;
	int** watering_can1 = (int**)malloc(sizeof(int*) * watering_can1_row_len);
	for(int i = 0; i < watering_can1_row_len; i++)
		watering_can1[i] = (int*)malloc(sizeof(int) * watering_can1_col_len);

	watering_can1[0][0] = 2;
	watering_can1[0][1] = 2;
	watering_can1[0][2] = 2;
	watering_can1[1][0] = 0;
	watering_can1[1][1] = 0;
	watering_can1[1][2] = 1;
    int N1 = 5;
	int ret1 = solution(watering_can1, watering_can1_row_len, watering_can1_col_len, N1, M1);
	// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
	printf("solution 함수의 반환 값은 %d입니다.\\n", ret1);

}