Post

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

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

문제&링크

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

풀이

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

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

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

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

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#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] << " ";
    }
}
This post is licensed under CC BY 4.0 by the author.