구름LEVEL_놀이공원

Minhee kang·2021년 10월 20일
0

문제 보러 가기 👈 클릭!

💡 풀이

✔ 풀이 방법

놀이공원 부지의 시작점을 가장 왼쪽의 맨 위 지점으로 지정

N X N 지도에서 시작점이 될 수 있는 위치를 반복하며 해당 위치를 시작점으로 갖는 K X K 격자안의 폐기물 개수를 카운트

폐기물 개수가 이때까지 구한 폐기물 개수의 최솟값 보다 작을 경우 폐기물 개수 새로 갱신

구현 코드 👇

import java.io.*;
import java.lang.*;
import java.util.*;


public class Main {
	public static final Scanner scanner = new Scanner(System.in);
	
	public static void testCase(int caseIndex) {
		int N = scanner.nextInt();  // 지도의 크기 
		int K = scanner.nextInt();  // 놀이공원의 크기
		
		int[][] wastes = new int[N][N]; // 각 칸의 쓰레기 존재 여부 
		for (int r = 0; r < N; r += 1) {
			for (int c = 0; c < N; c += 1) {
				wastes[r][c] = scanner.nextInt();
			}
		}
		
		int answer = Integer.MAX_VALUE; //초기값 = 정수의 최대값
		for(int r = 0; r < N - K + 1; r += 1) {
			for(int c = 0; c < N - K + 1; c += 1) {
				//가장 왼쪽의 맨 위를 시작점 이라 정의
				//시작점이 wastes[r][c] 인 K*K격자안에 들어 있는 폐기물 개수 cnt
				int cnt = 0;
				for(int i = r; i < r + K; i += 1) {
					for(int j = c; j < c + K; j += 1) {
						cnt += wastes[i][j];
					}
				}
				answer = Math.min(answer, cnt);
			}
		}

		System.out.println(answer);
	}
	
	public static void main(String[] args) throws Exception {
		int caseSize = scanner.nextInt();
		
		for (int caseIndex = 1; caseIndex <= caseSize; caseIndex += 1) {
			testCase(caseIndex);
		}
	}
}

0개의 댓글