※ 저의 풀이가 무조건적인 정답은 아닙니다.
다른 코드가 좀 더 효율적이고 좋을 수 있습니다.
다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.
문제 주소입니다.
https://codeup.kr/problem.php?id=1494
1. 문제
2. 문제 해석
3. 소스 코드
문제
크기가 n인 1차원 배열 d[]에 대해 |
입력
첫 번째 줄에 배열의 크기 n과 구간의 개수 k가 공백을 두고 입력된다. |
출력
첫 번째 줄에는 배열의 상태를 출력한다. 두 번째 줄에는 누적합을 계산해 출력한다. |
입력 예시
7 4 1 2 1 2 3 1 3 4 1 4 5 1 |
출력 예시
1 1 0 0 -1 -1 0 |
2. 문제풀이
문제이해가 어려웠습니다. k개의 구간 [s, e]와, u를 입력받아 d[s] = d[s]+u; 수행하라고 합니다. 4개의 구간 데이터 가 들어온다고 할때 s e u 로 생각하시면 됩니다. 누적합은 이전 누적합 + 배열상태로 처리해주시면 됩니다. 코드는 아래와 같습니다. |
3. 소스코드
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
|
#include <iostream>
using namespace std;
int main() {
int k, n, arr[101]{ 0 }, arr2[101]{ 0 }, arr3[3];
cin >> k >> n;
//n개만큼의 데이터가 들어온다
for (int i = 1; i <= n; i++) {
//데이터는 s, e, u 순으로 들어온다.
cin >> arr3[0] >> arr3[1] >> arr3[2];
//d[s] = d[s] + u;
arr[arr3[0]] = arr[arr3[0]] + arr3[2];
//d[e+1] = d[e+1] - u;
arr[arr3[1] + 1] = arr[arr3[1] + 1] - arr3[2];
}
//1차원 배열상태 출력하기
for (int i = 1; i <= k; i++) cout << arr[i] << " ";
cout << endl;
for (int i = 1; i <= k; i++) {
//이전 누적합 + 현재배열상태를 더하고 출력
arr2[i] = arr2[i - 1] + arr[i];
cout << arr2[i] << " ";
}
return 0;
}
|
'코딩테스트 > 코드업' 카테고리의 다른 글
여러 개씩 묶어 작은 값 골라 배열 만들기 5-7 C++(1498)[코드업, code up] (0) | 2019.12.27 |
---|---|
2차원 차이 배열 만들기 5-4 C++(1495)[코드업, Code up] (0) | 2019.12.26 |
2차원 누적 합 배열 만들기 5-2 C++(1493)[코드업, code up] (0) | 2019.12.24 |
2차원 배열 달팽이 채우기 4-3 C++(1486)[코드업, code up] (0) | 2019.12.23 |
2차원 배열 달팽이 채우기 4-1 C++(1484)[코드업, code up] (0) | 2019.12.22 |
댓글