※ 저의 풀이가 무조건적인 정답은 아닙니다.
다른 코드가 좀 더 효율적이고 좋을 수 있습니다.
다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.
문제 주소입니다.
https://codeup.kr/problem.php?id=1493
1. 문제
2. 문제 해석
3. 소스 코드
문제
n*m개의 데이터를 배열에 입력 받은 후, |
입력
첫 번째 줄에 배열의 크기 n, m이 공백을 두고 입력된다. |
출력
n*m 개의 2차원 누적 합 데이터를 한 줄로 출력한다 |
입력 예시
3 5 1 2 3 4 5 5 4 3 2 1 1 5 2 4 3 |
출력 예시
1 3 6 10 15 6 12 18 24 30 7 18 26 36 45 |
2. 문제풀이
이 문제에서 중요한 부분은 중복되서 더 하지 않는 부분입니다. 1,1을 계산할때 저는 간단하게 계산이 완료된 (1,0)과 (0, 1) 그리고 계산이 되지않은 (1,1)을 더해서 만들어보려 했습니다. 그랬더니 0,0 부분이 겹쳐서 따로 빼줘야 하더군요.
그래서 계산을 쉽게하기 위해 원본배열과 계산후 배열을 따로만들기로 했습니다. ex) 1,1 이라면 (0, 0), (0, 1), (1, 0), (1, 1)을 더해줘야 합니다.
이렇게 계산하기 위해서는 4중 for문을 사용해야 했습니다. 나중에 좀더 효율적으로 더할 수 있는 방법을 찾는다면 수정하도록 하겠습니다. |
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
27
28
29
30
31
32
33
|
#include <iostream>
using namespace std;
int main() {
int n, m, temp, arr[100][100]{ 0 }, arr2[100][100]{ 0 };
cin >> n >> m;
//기본배열에 값을 입력받는다.
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> arr[i][j];
}
}
//두번째 배열에 이전까지 있던 합들을 더한다.
//ex) 1,1 이라면 (0, 0), (0, 1), (1, 0), (1, 1)을 더해준다.
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
for (int k = 0; k <= i; k++) {
for (int z = 0; z <= j; z++) {
arr2[i][j] += arr[k][z];
}
}
}
}
//더한 값들을 출력
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << arr2[i][j] << " ";
}
cout << endl;
}
return 0;
}
|
'코딩테스트 > 코드업' 카테고리의 다른 글
2차원 차이 배열 만들기 5-4 C++(1495)[코드업, Code up] (0) | 2019.12.26 |
---|---|
1차원 차이 배열 만들기 5-3 C++(1494)[코드업, codeup] (0) | 2019.12.25 |
2차원 배열 달팽이 채우기 4-3 C++(1486)[코드업, code up] (0) | 2019.12.23 |
2차원 배열 달팽이 채우기 4-1 C++(1484)[코드업, code up] (0) | 2019.12.22 |
2차원 배열 빗금 채우기 3-3 C++(1478)[code up,코드업] (0) | 2019.12.21 |
댓글