문제
N x N 배열 안의 숫자는 해당 영역에 존재하는 파리의 개수를 의미한다.
M x M 크기의 파리채를 한 번 내리쳐 최대한 많은 파리를 죽이고자 한다.
죽은 파리의 개수를 구하라!
[제약 사항]
1. N 은 5 이상 15 이하이다.
2. M은 2 이상 N 이하이다.
3. 각 영역의 파리 갯수는 30 이하 이다.
풀이
- n과 m의 범위가 작기 때문에 모든 경우를 해줘도 될 것 같다.
- i <= (n-m), j<=(n-m) 의 범위에서 모든 (i,j)에 대하여 (i,j)를 시작점으로 하는 M X M 크기의 사각형 내의 파리의 합을 구해준다.
- 합을 매번 최대 값과 비교하여 최댓값을 구한다.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Solution { static int max, n, m; static int[][] area; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(br.readLine()); for(int tc=1; tc<=T; tc++) { StringTokenizer st = new StringTokenizer(br.readLine()," "); n = Integer.parseInt(st.nextToken()); m = Integer.parseInt(st.nextToken()); area = new int[n][n]; for(int i=0; i<n; i++) { st = new StringTokenizer(br.readLine()," "); for(int j=0; j<n; j++) { area[i][j] = Integer.parseInt(st.nextToken()); } } max = 0; //모든 경우의 수를 구한다. for(int i=0; i<=n-m; i++) { for(int j=0; j<=n-m; j++) { getMax(i,j); } } System.out.println("#"+tc+" "+max); } } static void getMax(int x, int y) { int sum = 0; for(int i=x; i<x+m; i++) { for(int j=y; j<y+m; j++) { sum += area[i][j]; } } if(max < sum) max = sum; } }
'SWEA > D2' 카테고리의 다른 글
[SWEA] 1986. 지그재그 숫자 (0) | 2019.04.30 |
---|---|
[SWEA] 1989. 초심자의 회문 검사 (0) | 2019.04.30 |
[SWEA] 2005. 파스칼의 삼각형 (0) | 2019.04.29 |
[SWEA] 2007. 패턴 마디의 길이 (0) | 2019.04.28 |
[SWEA] 1926. 간단한 369게임 (0) | 2019.04.28 |