Posts 알고리즘 - 1209. [S/W 문제해결 기본] Sum 문제
Post
Cancel

알고리즘 - 1209. [S/W 문제해결 기본] Sum 문제

SW Expert Academy 의 1209번 문제입니다.

100x100 의 2차원 배열이 주어지고, 각 행 및 열들의 데이터 합과 두 대각선 데이터의 합들 중 최댓값을 찾는 문제로 아주 단순한 문제입니다.

  • 난이도 : 1

문제 조건

  • 배열의 크기는 100x100 이다.

  • 각 행 혹은 열, 대각선 데이터의 합은 int 범위를 넘어가지 않는다.

  • 동일한 최댓값이 있으면 하나의 값만 출력한다.

Input

첫 줄에는 테스트 케이스 번호, 그 다음에는 2차원 배열의 값들이 주어진다.

Output

최댓값을 출력한다.


소스코드

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <algorithm>
#define N 100
using namespace std;

int main() {

	int test_case;
	int input = 0;
	int row_sum = 0, col_sum = 0, dig_sum = 0, dig_L_sum = 0;
	int Rnum;
	int idx = 0;
	int arr[100][100] = { 0, };
	int result[202] = { 0, };

	for (int i = 0; i < 10; i++) {
		cin >> test_case;	
		/* 100 x 100 행렬에 데이터 넣기 */
		for (int row = 0; row < 100; row++) {
			for (int col = 0; col < 100; col++) {
				cin >> input;
				arr[row][col] = input;
				row_sum += arr[row][col];

				if (row == col) {
					dig_sum += arr[row][col];
				}
			}
			/* 한 행에 데이터가 다 들어갔으므로 합을 구하여 넣는다.*/
			result[idx++] = row_sum;
			row_sum = 0;
		}
		result[idx++] = dig_sum; // 오른쪽 대각선 합의 데이터를 넣는다.

		/* 열의 합 데이터를 넣는다. (세로합) */
		for (int col = 0; col < 100; col++) {
			for (int row = 0; row < 100; row++) {
				col_sum += arr[row][col];
			}
			result[idx++] = col_sum;
			col_sum = 0;
		}
		Rnum = 0;
		/* 왼쪽 대각선의 합 데이터를 넣는다.*/
		for (int col = 99; col >=0 ; col--) {
			dig_L_sum += arr[Rnum][col];
			Rnum += 1;
		}
		result[idx++] = dig_L_sum;
		
		/* 열 및 행 합 데이터 정렬 */
		sort(result, result + (N*2 + 2));
		cout << "#" << test_case << " " << result[(N * 2 + 2) - 1] << endl;

		idx = 0; row_sum = 0; col_sum = 0; dig_sum = 0; dig_L_sum = 0;
	}
}

알고리즘 - 순차 검색과 이진 검색, 인덱스

알고리즘 - 1210. [S/W 문제해결 기본] 사다리타기 문제(1)