본문 바로가기

알고리즘/문제 풀이

SW 2005 파리 퇴치

SW Expert Academy

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

1. 코드 

import java.util.*;
        import java.util.function.Predicate;

public class Solution {
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();               // 테스트 케이스 받기
        for (int i = 1; i <= T; i++) {
            int N = sc.nextInt();           // 파리가 있는 공간의 칸 수   
            int M = sc.nextInt();           // 파리채의 넓이 칸 수 
            int swatterTotal = 0;           // 한 테스트에서 파리채로 파리 때려 잡는 경우의 수를 저장
            ArrayList<Integer> list = new ArrayList<>();
            int [][] flies = new int[N][N];
            for (int j = 0; j < N; j++) {   // 공간 마다 파리의 갯수 집어넣기 by 2차원 배열
                for (int k = 0; k < N; k++) {
                    flies[j][k] = sc.nextInt();
                }
            }
        for (int l = 0; l <= N-M; l++) {    // 파리채는 배열 사이를 이동해야 하므로 for문으로 한번 더 감싼다.
            for (int t = 0; t <= N - M; t++) {  // 열(가로)를 먼저 훑도록 하였다.

                for (int j = l; j < M + l; j++) {   // 가로, 세로가 움직인다.
                    for (int k = t; k < M + t; k++) {
                       swatterTotal += flies[j][k]; // 경우의 수마다의 때려 잡은 파리의 수 총합이 적힌다.

                    }


                }
                list.add(swatterTotal); // 때려잡은 파리 총합 경우의 수를 모두 저장한다.
                swatterTotal = 0;
            }
        }
        int MAX = list.stream().mapToInt(x->x).max().orElse(0); // 경우의 수 중 때려잡은 파리 수가 제일 높은 녀석을 호출
        System.out.println("#"+i+ " " + MAX);   // 반환
        list.clear();

    }
 }
}

참고

1-(4) 2 차원 배열 순회 및 자동 초기화 방법 :: 정신과 시간의 방 (tistory.com)

 

1-(4) 2 차원 배열 순회 및 자동 초기화 방법

1. 2차원 배열 순회 (모든 행의 길이가 같은 2 차원 배열) String[][] seats = new String[][]{ {"A1", "A2", "A3", "A4", "A5"}, {"B1", "B2", "B3", "B4", "B5"}, {"C1", "C2", "C3", "C4", "C5"} }; for (int i = 0; i < 3; i++) { // 세로 for (int

dalcheonroadhead.tistory.com