백준 19951 c++ : 구현 -> 다시해보기

magicdrill·2025년 5월 7일
0

백준 문제풀이

목록 보기
598/655

백준 19951 c++ : 구현

//#include <stdio.h>
//#include <stdlib.h>
//#pragma warning(disable:4996)
//
//void input_data(int* N, int* M);
//int* input_ground(int N);
//int** input_order(int M);
//int* input_order2(int N, int M);
//void find_answer(int N, int M, int* ground, int** order);
//void find_answer2(int N, int M, int* ground, int* order);
//
//int main(void) {
//	int N, M;
//	int* ground;
//	int** order;
//	int* order2;
//
//	input_data(&N, &M);
//	ground = input_ground(N);
//	//order = input_order(M);
//	order2 = input_order2(N, M);
//
//	//find_answer(N, M, ground, order);
//	find_answer2(N, M, ground, order2);
//
//	// 메모리 해제
//	free(ground);
//	/*for (int i = 0; i < M; i++) {
//		free(order[i]);
//	}
//	free(order);*/
//	free(order2);
//
//	return 0;
//}
//
//void input_data(int* N, int* M) {
//	scanf("%d %d", N, M);
//
//	return;
//}
//
//int *input_ground(int N) {
//	int i;
//	int* ground = (int*)malloc(sizeof(int) * (N + 1));
//
//	if (ground == NULL) {
//		fprintf(stderr, "메모리 할당 실패\n");
//		exit(1);
//	}
//
//	for (i = 1; i <= N; i++) {
//		scanf("%d", &ground[i]);
//	}
//
//	return ground;
//}
//
//int** input_order(int M) {
//	int i, a, b, k;
//	int** order = (int**)malloc(sizeof(int*) * M);
//	if (order == NULL) {
//		fprintf(stderr, "메모리 할당 실패\n");
//		exit(1);
//	}
//
//	for (i = 0; i < M; i++) {
//		order[i] = (int*)malloc(sizeof(int) * 3);
//		if (order[i] == NULL) {
//			fprintf(stderr, "메모리 할당 실패\n");
//			exit(1);
//		}
//
//		scanf("%d %d %d", &a, &b, &k);
//		order[i][0] = a;
//		order[i][1] = b;
//		order[i][2] = k;
//	}
//
//	return order;
//}
//
//int* input_order2(int N, int M) {
//	int i, j, a, b, k;
//	int* order2 = (int*)malloc(sizeof(int) * (N + 1));
//
//	if (order2 == NULL) {
//		fprintf(stderr, "메모리 할당 실패\n");
//		exit(1);
//	}
//	for (i = 0; i <= N; i++) {
//		order2[i] = 0;
//	}
//
//	for (i = 0; i < M; i++) {
//		scanf("%d %d %d", &a, &b, &k);
//		for (j = a; j <= b; j++) {
//			order2[j] += k;
//		}
//	}
//
//	return order2;
//}
//
//
////시간 초과 발생 -> 입력과 동시에 명령을 하나로 묶어?야함
//void find_answer(int N, int M, int* ground, int** order) {
//	int i, j, a, b, k;
//	
//	for (i = 0; i < M; i++) {
//		a = order[i][0];
//		b = order[i][1];
//		k = order[i][2];
//		for (j = a; j <= b; j++) {
//			ground[j] += k;
//		}
//		/*
//		for (j = 1; j <= N; j++) {
//			printf("%d ", ground[j]);
//		}
//		printf("\n");
//		*/
//	}
//
//	for (j = 1; j <= N; j++) {
//		printf("%d ", ground[j]);
//	}
//	printf("\n");
//
//	return;
//}
//
//// 시간 초과 발생 또
//void find_answer2(int N, int M, int* ground, int* order) {
//	int i;
//
//	for (i = 1; i <= N; i++) {
//		ground[i] += order[i];
//		printf("%d ", ground[i]);
//	}
//	printf("\n");
//
//	return;
//}

#include <stdio.h>
#pragma warning(disable:4996);
#define MAXN 100001

void input_data(int* N, int* M, int* ground) {
    scanf("%d %d", N, M);
    for (int i = 1; i <= *N; i++) {
        scanf("%d", &ground[i]);
    }
}

void input_orders(int M, int* diff) {
    int i, a, b, k;
    for (i = 0; i < M; i++) {
        scanf("%d %d %d", &a, &b, &k);
        diff[a] += k;
        diff[b + 1] -= k;
    }
}

void find_answer(int N, int* ground, int* diff) {
    int sum = 0;
    for (int i = 1; i <= N; i++) {
        sum += diff[i];
        ground[i] += sum;
        printf("%d ", ground[i]);
    }
    printf("\n");
}

int main(void) {
    int N, M;
    int ground[MAXN] = { 0 };
    int diff[MAXN] = { 0 };

    input_data(&N, &M, ground);
    input_orders(M, diff);
    find_answer(N, ground, diff);

    return 0;
}

0개의 댓글