-
2001. 파리 퇴치 - 자바(JAVA)알고리즘/SW Expert Academy 2022. 2. 23. 00:01반응형
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PzOCKAigDFAUq
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
문제 해석
N x N 배열 안의 숫자는 해당 영역에 존재하는 파리의 개수를 의미한다.
M x M 크기의 파리채를 한 번 내려쳐 최대한 많은 파리를 죽이고자 할 때 죽은 파리의 개수를 구하라
예를 들어 M=2이고, N = 5인 경우의 정답은 49이다.
입력
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스 주어진다.
각 테스트 케이스의 첫번째 줄에 N과 M이 주어집니다.
다음 N개의 줄에 걸쳐 N x N 배열이 주어집니다.
제약조건
5<= N <=15
2 <=M <= N
출력
출력의 각 줄은 '#t'로 시작하고, 공백을 한 칸 둔 다음 정답을 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)문제 풀이 전 설계
N x N 배열을 입력받고 0~N까지 검사를 M x M 크기로 검사를 해야 한다.
이때 배열이 초과하지 않도록 범위를 잘 설정하는 게 포인트다.
코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class flyAway { static int[][] flyBoard; static int N, M; static BufferedReader br; public static void main(String[] args) throws IOException { // TODO Auto-generated method stub br = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(br.readLine()); for (int t = 1; t <= T; t++) { inputFlyBooardInfo(); int maxFlyCount = getMaxFlyCount(); printMaxFlyCount(t, maxFlyCount); } } private static void inputFlyBooardInfo() throws IOException { StringTokenizer st = new StringTokenizer(br.readLine(), " "); N = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); flyBoard = new int[N][N]; for (int i = 0; i < N; i++) { st = new StringTokenizer(br.readLine(), " "); for (int j = 0; j < N; j++) { flyBoard[i][j] = Integer.parseInt(st.nextToken()); } } } private static int getMaxFlyCount() { int max = 0; //i,j for문은 탐색을 시작할 영역을 순회 //k,l for문은 해당 영역에서부터 M x M 만큼 탐색 for (int i = 0; i <= N - M; i++) { for (int j = 0; j <= N - M; j++) { int sum = 0; for (int k = 0; k < M; k++) { for (int l = 0; l < M; l++) { sum += flyBoard[i + k][j + l]; } } max = max > sum ? max : sum; } } return max; } private static void printMaxFlyCount(int t, int maxFlyCount) { StringBuilder sb = new StringBuilder(); sb.append("#" + t + " "); sb.append(maxFlyCount + "\n"); System.out.print(sb.toString()); } }
'알고리즘 > SW Expert Academy' 카테고리의 다른 글
1940. 가랏! RC카! (0) 2022.02.24 2805. 농작물 수확하기 - 자바(JAVA) (0) 2022.02.24 1873. 상호의 배틀필드 - 자바(JAVA) (0) 2022.02.22 1954. 달팽이 숫자 - 자바(JAVA) (0) 2022.02.21 1289. 원재의 메모리 복구하기 - 자바(JAVA) (0) 2022.02.18