알고리즘 모음집/알고리즘 (Algorithm)
[모의 SW 역량테스트] 홈 방범 서비스
KyeongMin
2019. 12. 1. 00:10
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
반응형