본문 바로가기
coding/algorithm

[SW Expert Academy] D3 2805. 농작물 수확하기

by 눈부신음표 2022. 5. 28.
728x90
더보기
// i = 0부터 시작해서
// 중간 column을 찾은 뒤(index기준 N/2)
// i를 1씩 증가시켜가며 앞뒤로 i번째까지 더한다.
// row가 N/2를 넘어가면 i를 1씩 감소하기 시작해서
// 데이터를 다 받아오면 끝난다.

#include<iostream>

using namespace std;

int main() {
	int tc;
	cin >> tc;
	for (int t = 0; t < tc; t++) {
		int N, answer = 0;
		cin >> N;
		int i = 0, add = 1, mid = N / 2;

		for (int j = 0; j < N; j++) {
			int start = mid - i, end = mid + i, num;
			for (int k = 0; k < N; k++) {
				scanf("%1d", &num);
				if (k >= start && k <= end) {
					answer += num;
				}
			}
			if (j == mid) add = -1;
			i += add;
		}
		cout << "#" << t + 1 << " " << answer << endl;
	}
}

문제

https://swexpertacademy.com/main/code/problem/problemDetail.do

 

SW Expert Academy

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

swexpertacademy.com

728x90

[접근]

간단한 문제이기 때문에, 더 간단하게 풀 수 있는 방법을 고민했고, 데이터를 받아오는 동시에 답을 구해야겠다고 생각했다.

중간 column을 찾은 뒤(index기준 N/2)
i = 0부터 시작해서 i를 1씩 증가시켜가며 앞뒤로 i번째까지 answer에 가져온 값을 더한다.
row가 N/2를 넘어가면 i를 1씩 감소하기 시작해서 해당 범위 내의 값들을 asnwer에 더한다.

데이터를 다 받아오면 끝난다.

728x90

댓글