[백준/C++] 19951번: 태상이의 훈련소 생활
[백준/C++] 19951번: 태상이의 훈련소 생활
문제&링크
https://www.acmicpc.net/problem/19951
풀이
연병장의 높이를 map 배열에 입력받는다.
조교의 지시를 받을 때 sum 배열에서 시작 점에 해당하는 인덱스에 조교가 지시한 높이 k를 입력하고, 끝 점 + 1에 -k를 입력한다. 이렇게 하면 어느 지점부터 어느 지점까지 조교의 지시대로 수행해야 하는지 확인할 수 있다.
모든 조교의 지시를 받고 난 후 map과 sum 배열을 처음부터 순회한다.
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.
