SWEA 2001 - 파리 퇴치

Updated:

Java

2001 번 - 파리 퇴치

문제

M x M 크기의 파리채를 한 번 내리쳐 최대한 많은 파리를 죽이고자 한다.
죽은 파리의 개수를 구하라!

접근 방법

(0,0)에서 부터 시작하여 (n - m + 1, n - m + 1)까지 m*m 크기의 상자를 이동해가며, 상자 안에 들어있는 파리들은 잡아 제일 많은 개수를 구한다.

코드

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

class Solution {
	
	static int map[][];
	public static void main(String []args) throws Exception {  
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	int result = 0;
    	StringTokenizer st;
    	int tc = stoi(br.readLine());
    	
    	for(int idx = 1; idx <= tc; idx++) {
    		st = new StringTokenizer(br.readLine());
    		int n = stoi(st.nextToken());
    		int m = stoi(st.nextToken());
    		map = new int[n][n];
			// 입력
    		for(int i = 0; i < n; i++) {
    			st = new StringTokenizer(br.readLine());
    			for(int j = 0; j < n; j++) {
    				map[i][j] = stoi(st.nextToken());
    			}
    		}
    		int biggest = 0;
    		for(int i = 0; i < n - m + 1; i++) {
    			for(int j = 0; j < n - m + 1; j++) {
    				biggest = Math.max(biggest, killFly(i,j,m));		// 시작 위치(y,x)를 하나씩 넘겨 주며, 반환하는 값의 최대를 넣는다.
    			}
    		}
    		result = biggest;
    		System.out.println("#" + idx + " " + result);
    	}
    	
	}
	static int killFly(int x, int y, int m) {		// m * m 크기의 간격에 있는 파리들을 잡는다. 
		int sum = 0;
		for(int i = 0; i < m; i++) {
			for(int j = 0; j < m; j++) {
				sum += map[y + i][x + j];
			}
		}
		return sum;
	}
	static int stoi(String str) {
    	return Integer.parseInt(str);
    }
}

총평

난이도

⭐★★★★

후기

파리에 사는 파리

개선할 점