SWEA 2001 파리 퇴치 D2 (자바 Java)

SWEA 2001 파리 퇴치

문제 정보

  • 문제 출처 : SW Expert Academy
  • 문제 번호 : 2001
  • 문제 제목 : 파리 퇴치
  • 문제 난이도 : D2
  • 풀이 언어 : Java

문제

N x N 배열 안에 숫자는 해당 영역에 존재하는 파리의 개수이다.

M x M 크기의 파리채를 한 번 내리쳐 최대한 많은 파리를 죽이고자 한다.

여기서 죽은 파리의 개수를 구하는 문제

접근

4중 for 문을 통해 최대 합을 구하였다.

풀이

  • 가장 첫 줄에는 테스트 케이스 개수 T 가 주어진다.
  • 각 테스트 케이스 첫 줄에 N과 M이 주어지고, 다음 N 줄에 N x N 배열이 주어진다.
  • 중첩된 for 루프를 사용하여 2차원 배열의 모든 가능한 M x M 크기의 부분 배열을 순회한다.
  • 각 부분 배열에 대해, 또 다른 중첩된 for 루프를 사용하여 그 부분 배열의 요소들의 합을 계산한다.
  • 계산된 합이 현재까지의 최대 합 보다 큰 경우, 최대 합을 업데이트한다.
  • 각 테스트 케이스에 대해 계산된 최대 부분 배열 합을 출력한다.

후기

for 문이 여러번 중첩되서 조금 헷갈렸지만 집중해서 잘 풀어 냈던 문제. 비슷한 문제를 더 풀어볼 계획이다.

코드

Java
import java.util.Scanner;
import java.io.FileInputStream;
 
class Solution
{
    public static void main(String args[]) throws Exception
    {
        Scanner sc = new Scanner(System.in);
        int T;
        T=sc.nextInt();
 
        for(int test_case = 1; test_case <= T; test_case++)
        {
            int N = sc.nextInt();
            int M = sc.nextInt();
            int[][] arr = new int[N][N];
             
            for (int i = 0; i < arr.length; i++) {
                for (int j = 0; j < arr[i].length; j++) {
                    arr[i][j] = sc.nextInt();
                }
            }
             
            int max = 0;
             
            for (int i = 0; i <= N-M; i++) {
                for (int j = 0; j <= N-M; j++) {
                    int sum = 0;
                    for (int a = 0; a < M; a++) {
                        for(int b = 0; b < M; b++) {
                            sum += arr[i+a][j+b];
                        }
                    }
                    if (max < sum) {
                        max = sum;
                    }
                }
            }
            System.out.println("#" + test_case + " " + max);
 
        }
    }
}
Java

Leave a Comment