Programming Practice/SWEA

[SWEA] 1209. SUM - D3 (C++)

Cage 2022. 5. 30. 20:56


문제

* 해당 문제의 모든 저작권은 SWEA 측에 있으며 본 블로그는 학업 흔적을 남겨 학업 상향을 위한 블로그로 이익을 추구하지 않으며 SWEA 측의 약관을 위배하지 않음을 명시합니다.*

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV13_BWKACUCFAYh 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


풀이

2차원 배열을 사용할 줄 아느냐를 묻는 문제인 듯하다.

대각선 구하는 방법만 알고 있으면 어려울 게 없는 문제이다.

최적화를 따로 안해서 코드 직관성이 떨어지는 편인데 더 깔끔하고 축소시킬 수 있는 문제라고 본다.


소스 코드

// Library
#include <iostream>
#include <string>
#include <stack>
#include <set>
#include <queue>
#include <deque>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <map>
#include <cctype>
#include <set>
#include <string.h>
#include <string>

// std::
using namespace std;

// Test_case
int T, test_case;

// Value
int N;
int arr[100][100];
int ans = 0;

// Matrix direction
//int dx[4] = { 0, 0, 1, -1 };
//int dy[4] = { 1, -1, 0, 0 };

// Sturct
//struct st {
//};

// Main function
int main() {
	// cin, cout
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	
	// SWEA 양식
	T = 10;
	//cin >> T;
	for (test_case = 1; test_case <= T; test_case++) {
		ans = 0;
		cin >> N;
		for (int i = 0; i < 100; i++) {
			for (int j = 0; j < 100; j++) {
				cin >> arr[i][j];
			}
		}

		int dsum1 = 0;
		int dsum2 = 0;

		for (int i = 0; i < 100; i++) {
			int rsum = 0;
			int csum = 0;
			int rcmax = 0;

			dsum1 += arr[i][i];

			for (int j = 0; j < 100; j++) {
				rsum += arr[i][j];
				csum += arr[j][i];
			}
			rcmax = max(rsum, csum);
			
			ans = max(ans, rcmax);
		}
		ans = max(ans, dsum1);
		for (int i = 0; i < 100; i++) {
			int c = 99 - i;
			dsum2 += arr[c][i];
		}
		ans = max(ans, dsum2);
		
		cout << "#" << N << " " << ans << '\n';
	}
	
	return 0;
}