Koala - 16기/코딩테스트 심화 스터디

[백준/C++] 19951번: 태상이의 훈련소 생활

.우디. 2024. 10. 27. 17:31

문제&링크

https://www.acmicpc.net/problem/19951

 

풀이

1. 연병장의 높이를 map 배열에 입력받는다.

2. 조교의 지시를 받을 때 sum 배열에서 시작 점에 해당하는 인덱스에 조교가 지시한 높이 k를 입력하고, 끝 점 + 1에 -k를 입력한다. 이렇게 하면 어느 지점부터 어느 지점까지 조교의 지시대로 수행해야 하는지 확인할 수 있다.

3. 모든 조교의 지시를 받고 난 후 map과 sum 배열을 처음부터 순회한다.

4. sum 배열의 값을 변수 s에 더하고, 해당 변수를 연병장 map에 더한다. 이렇게 하여 조교의 지시를 매 순간 수행하는 것이 아니라, 한 번에 수행할 수 있게 된다.

 

코드

#include <iostream>

using namespace std;

int map[100001] = {0};
int sum[100001] = {0};

int main() {
    int N, M;
    
    cin >> N >> M;
    
    for (int i = 1; i <= N; i++) {
        cin >> map[i];
    }
    
    int a, b, k;
    for (int i = 0; i < M; i++) {
        cin >> a >> b >> k;
        sum[a] += k;
        sum[b + 1] -= k;
    }
    
    int s = 0;
    for (int i = 1; i <= N; i++) {
        s += sum[i];
        map[i] += s;
        cout << map[i] << " ";
    }
}