본문 바로가기
알고리즘/SWEA

[SWEA] 1209. [S/W 문제해결 기본] 2일차 - Sum

by hyerann 2019. 4. 29.

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV13_BWKACUCFAYh&categoryId=AV13_BWKACUCFAYh&categoryType=CODE

 

SW Expert Academy

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

www.swexpertacademy.com

완전 탐색으로 모든 경우의 답을 구하면서 최대 값을 발견할 때 마다 maxSum의 값을 갱신해주었다.

행과 열의 합은 같은 숫자를 이용해서 index를 만들어낼 수 있기 때문에 하나의 함수로 작성했고, 대각선 두 개도 같은 이유로 하나의 함수로 작성했다.

#include <iostream>
#include <ios>
#include <algorithm>
using namespace std;

int arr[100][100], maxSum;
int getResult();
void getRowColSum();
void getDiagonalSum();

int main() {
	cin.tie(0);	ios::sync_with_stdio(0);
	for (int tc = 1; tc <= 10; tc++) {
		int T;
		cin >> T;
		maxSum = -2e9;
		for (int y = 0; y < 100; y++) {
			for (int x = 0; x < 100; x++) {
				cin >> arr[y][x];
			}
		}
		cout << '#' << tc << ' ' << getResult() << "\n";
	}
	return 0;
}

int getResult() {
	getRowColSum();
	getDiagonalSum();
	return maxSum;
}

void getRowColSum() {
	for (int y = 0; y < 100; y++) {
		int sum1 = 0, sum2 = 0;
		for (int x = 0; x < 100; x++) {
			sum1 += arr[y][x];
			sum2 += arr[x][y];
		}
		int tempMax = max(sum1, sum2);
		maxSum = max(maxSum, tempMax);
	}
}

void getDiagonalSum() {
	int sum1 = 0, sum2 = 0;
	for (int i = 0; i < 100; i++) {
		sum1 += arr[i][i];
		sum2 += arr[i][99 - i];
	}
	int tempMax = max(sum1, sum2);
	maxSum = max(maxSum, tempMax);
}

댓글