[SWEA / Java] 2001. 파리퇴치

이하얀·2024년 5월 12일
0

🧢 SWEA

목록 보기
5/10
post-thumbnail

💡 Info



💭 문제 이해

  • 해당 하는 영역의 숫자가 가장 큰 것끼리 엮일 수 있도록 계산하기!

📥입력 조건

  • 가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
  • 각 테스트 케이스의 첫 번째 줄에 N 과 M 이 주어지고, 다음 N 줄에 걸쳐 N x N 배열이 주어진다.
10
5 2
1 3 3 6 7
8 13 9 12 8
4 16 11 12 6
2 4 1 23 2
9 13 4 7 3
6 3
29 21 26 9 5 8
21 19 8 0 21 19
9 24 2 11 4 24
19 29 1 0 21 19
10 29 6 18 4 3
29 11 15 3 3 29
...

📤출력 조건

  • 출력의 각 줄은 '#t'로 시작하고, 공백을 한 칸 둔 다음 정답을 출력한다. (t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
#1 49
#2 159
...


💭 생각한 알고리즘

실제 풀이 시간 : 30분

  • 2차원 배열 입력받기
  • 배열 값을 0부터 n-m+1까지 살피면서 큰 값을 찾고, sum을 통해 값을 더하다가 -> 현재의 배열과 지금까지의 sum을 비교해서 더 큰 값으로 변경되도록 구성
import java.util.*;
 
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 <n; i++) {
                for(int j=0; j<n; j++) {
                    arr[i][j] = sc.nextInt();
                }
            }
             
            int max = 0;
            for(int i=0; i <n-m+1; i++) {
                for(int j=0; j<n-m+1; j++) {
                    int sum = 0;
                    for(int k=0; k<m; k++) {
                        for(int p=0; p<m; p++) {
                            sum += arr[i+k][j+p];
                        }
                    }
                    if(max<sum)
                        max = sum;
                }
            }
            System.out.println("#" + test_case + " " + max);
             
             
        }
    }
}


profile
언젠가 내 코드로 세상에 기여할 수 있도록, BE 개발 기록 노트☘️

0개의 댓글