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

[SWEA] 2805. 농작물 수확하기

by hyerann 2019. 5. 6.

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

 

SW Expert Academy

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

www.swexpertacademy.com

배열의 마름모 모양에 해당하는 index의 값들의 합을 구해야하기 때문에 점점 넓어지는 윗 부분과 점점 좁아지는 밑 부분을 나눠서 index에 접근하였다.

농장의 크기/2가 중앙에 위치한 index이므로 i를 증가시키거나 감소시키면서 농장의 크기/2-i ~ 농장의 크기/2+i 에 해당하는 index의 값들을 더하면 된다.

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

int farmSize, farm[49][49];
int getResult();

int main() {
	int T; cin >> T;

	for (int tc = 1; tc <= T; tc++) {
		cin >> farmSize;
		for (int y = 0; y < farmSize; y++) {
			for (int x = 0; x < farmSize; x++) {
				scanf("%1d", &farm[y][x]);
			}
		}
		cout << '#' << tc << ' ' << getResult() << "\n";
	}
	return 0;
}
int getResult() {
	int result = 0;
	for (int i = 0; i < farmSize / 2; i++) {
		for (int j = farmSize / 2 - i; j <= farmSize / 2 + i; j++) {
			result += farm[i][j];
		}
	}
	for (int i = farmSize / 2; i >= 0; i--) {
		for (int j = farmSize / 2 - i; j <= farmSize / 2 + i; j++) {
			result += farm[farmSize - 1 - i][j];
		}
	}
	return result;
}

댓글