雲Lv 3-遊園地


コード#コード#
// Run by Node.js
const readline = require('readline');

const solution = (N, K, data) => {
	
	let count = 0;
	let min = 99999;
	let test = []
	// 100 * 100 * 10 * 10 = 1000000 -> 1초
	for(let i=0;i<=N-K;i++) {
		for(let j=0;j<=N-K;j++) {
			for(let q=i; q<i+K; q++) {
				for(let r = j; r< j+K;r++) {
					if(data[q][r] === '1') count++;
				}
			}
			test = []
			if(count < min) min = count;
			count = 0;
		}
	}
	return min;
}
(async () => {
	let rl = readline.createInterface({ input: process.stdin });
	
	let T = null;
	let N = null, K = null;
	let info = null;

	let data = [];
	let countT  = 0;
	let countN = 0;
	
	for await (const line of rl) {
		// console.log('Hello Goorm! Your input is', line);
		
		if(!T) {
			T = +line;
		} else if(!N && !K) {
			// console.log(line);
			[N, K] = line.split(' ').map((el) => +el)
		} else {
			data.push(line.split(' '))
			countN += 1; // data를 입력받으면 countN을 증가시켜주고
  	}
		if (countN == N) { // N만큼 data를 잘 입력 받았으면
			const res = solution(N, K, data); // solution을 호출하고
			console.log(res);
			N = null; // T, countT를 제외한 값들을 초기화해준다.
			K = null;
			countN = 0;
			data = [];
			countT += 1; // 그리고 테스트 케이스 하나를 통과했으니 countT를 1 올려준다.
		}
		if (countT === T) { // 입력받은 T 만큼 테스트 케이스를 통과하게되면
			rl.close(); // rl.close()를 호출하고
		}

		if(T === countT)
		{
			rl.close();
		}
	}
	
	process.exit();
})();
#include<cstdio>
#include<cstdlib>
#include<memory.h>
#include<iostream>
#include<algorithm>
#include <limits.h>

using namespace std;


int get_minimum_trashes(int **waste, int N, int K) {
	int answer = INT_MAX;
	int count = 0;
	for(int i=0;i<=N-K;i++) {
		for(int j=0;j<=N-K;j++) {
			for(int q=i;q<i+K;q++) {
				for(int r=j;r<j+K;r++) {
					if(waste[q][r] == 1) count++;
				}
			}
			if(count < answer) answer = count;
			count = 0;
		}
	}

	return answer;
}

void test_case(int caseIndex) {
	int N, K;
	scanf("%d %d", &N, &K);

	int **wastes = new int *[N];
	for (int r = 0; r < N; r += 1) {
		wastes[r] = new int[N];
		for (int c = 0; c < N; c += 1) {
			scanf("%d", &wastes[r][c]);
		}
	}

	int answer = get_minimum_trashes(wastes, N, K);
	printf("%d\n", answer);

	for (int r = 0; r < N; r += 1) {
		delete[] wastes[r];
	}
	delete[] wastes;
}

int main() {
	int caseSize;
	scanf("%d", &caseSize);

	for (int caseIndex = 0; caseIndex < caseSize; caseIndex += 1) {
		test_case(caseIndex);
	}
	return 0;
}
解答と感想
クラウドプラットフォームでテストコードに遭遇したので、練習しながら問題を解きます.Javascript、最近よく問題を解いて、I/Oはとても不便です...あらかじめテンプレートを作っておけば良いのですが、入出力でしっかり練習して塞がないようにしましょう.
問題はコードモンスターの講義にあるようです.制限条件が小さいので、四重For文で解決すると、既存の位置を覚えたり、より良い処理方法があるかもしれませんが、まず大量の量を解放する必要があるのでスキップしました.