구름Lv3 - 놀이공원

요리하는코더·2021년 10월 18일
0

알고리즘 - 문제

목록 보기
28/48
post-thumbnail

코드

// 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로 요새 문제를 자주 푸는데 입출력이 너무 불편하다...ㅠㅠㅠ 템플릿을 미리 만들어 둘 수 있으면 좋을 거 같은데 입출력에서 막히지 않게 연습을 잘 해야겠다.
문제는 코딩 몬스터님의 강의에 있는 문제 같다. 제한 조건이 작아서 4중 For문으로 해결했는데 기존의 위치를 기억하고 처리하거나 더 좋은 방식이 있을 거 같은데 일단은 양을 많이 풀어야할 거 같아서 넘어갔다.

profile
요리 좋아하는 코린이

0개의 댓글