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);
}
}
총평
난이도
⭐★★★★
후기
파리에 사는 파리
개선할 점
없