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