문제&링크
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] << " ";
}
}
'Koala - 16기 > 코딩테스트 심화 스터디' 카테고리의 다른 글
[백준/Python] 3986번: 좋은 단어 (0) | 2024.11.03 |
---|---|
[python] 백준 12789 도키도키 간식드리미 (0) | 2024.11.02 |
[백준/Python] 1912번: 연속합 (0) | 2024.10.27 |
[백준/Python] 16401번: 과자 나눠주기 (0) | 2024.10.27 |
[BOJ/파이썬] 2230번: 수 고르기 (0) | 2024.10.13 |