[모의 SW 역량테스트] 홈 방범 서비스
본문 바로가기
알고리즘 모음집/알고리즘 (Algorithm)

[모의 SW 역량테스트] 홈 방범 서비스

by KyeongMin 2019. 12. 1.
728x90
반응형
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
#define NS 21
int kArr[NS * 2 - 1];
int input[NS][NS];
int N,M;
int houseMax = 0x80000000;
void houseSafe() {
	for (int ys = 0; ys < N; ys++) {
		for (int xs = 0; xs < N; xs++) {
			memset(kArr, 0, sizeof(kArr));
			for (int ye = 0; ye < N; ye++) {
				for (int xe = 0; xe < N;xe++) {
					if (input[ye][xe] == 1) {
						int k = abs(ys - ye) + abs(xs - xe)+1;
						kArr[k]++;
					}
				}
			}
			int houseCnt=0;
			// 계산해봅시다.
			for (int k = 1; k <= N * 2 - 1; k++) {
				houseCnt += kArr[k];
				int cost = k * k + (k - 1)*(k - 1);
				if (((M*houseCnt) - cost) >= 0) {
					houseMax = houseMax < houseCnt ? houseCnt : houseMax;
				}
			}
		}
	}
}
void init() {
	houseMax = 0x80000000;
	cin >> N>>M;
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			cin >> input[i][j];
		}
	}
	houseSafe();
}
int main(void) {
	int T;
	cin >> T;
	for (int tc = 1; tc <= T; tc++) {
		init();
		cout << '#' << tc << " " << houseMax << endl;
	}

	return 0;
}

 

거리를 구하는 공식을 이용해서 현재 중심을 기준으로해서 k 값을 구합니다. 거리에 +1 이 k가 되고 그것에 해당되는 

집을 kArr에 넣어주고 나중에 계산시 , 인원수를 중첩으로 더해가면서 0이상인 수 즉 양수 인경우에 집의 수의 

최대값을 구하면되는 문제입니다. 정말 이렇게 듣고 보니 간단한 문제 아닌가요? 

여러분들도 도전해보세요.

728x90
반응형

댓글