본문 바로가기

숨막히는 알고말고/문제 풀이

[SWEA] 파리 퇴치

👀 문제 설명

문제

로그인해야 문제를 볼 수 있다.

 

✍🏻풀이

시작점 (0, 0)부터 (N-M, N-M)까지 돌면서, 그 안에서 M * M 크기의 배열을 또 돌면 된다.

M * M 크기의 배열 안에 있는 값들을 다 더해주고, 그 중 최댓값을 출력하면 된다.

 

코드

package swea;

//파리 퇴치 (https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PzOCKAigDFAUq&categoryId=AV5PzOCKAigDFAUq&categoryType=CODE&problemTitle=%ED%8C%8C%EB%A6%AC+%ED%87%B4%EC%B9%98&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 )

import java.util.*;
import java.io.*;

public class SWEA_2001 {
	
	private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
	private static StringTokenizer st;
	private static int T;
	private static int N, M;
	private static int[][] board;

	public static void main(String[] args) throws Exception {
		T = Integer.parseInt(br.readLine());
		
		for (int tc = 1; tc <= T; tc++) {
			// input
			st = new StringTokenizer(br.readLine());
			N = Integer.parseInt(st.nextToken());
			M = Integer.parseInt(st.nextToken());
			
			board = new int[N][N];
			for (int i = 0; i < N; i++) {
				st = new StringTokenizer(br.readLine());
				
				for (int j = 0; j < N; j++) {
					board[i][j] = Integer.parseInt(st.nextToken());
				}
			}
			
			int maxNum = 0;
			// solve
			for (int startX = 0; startX <= N - M; startX++) {
				for (int startY = 0; startY <= N - M; startY++) {
					int curNum = 0;
					
					for (int i = 0; i < M; i++) {
						for (int j = 0; j < M; j++) {
							curNum += board[startX + i][startY + j];
						}
					}
					
					maxNum = Math.max(maxNum, curNum);
				}
			}
			
			bw.write("#" + tc + " " + maxNum);
			bw.newLine();
		}
		
		bw.flush();
		bw.close();
	}
	
}

'숨막히는 알고말고 > 문제 풀이' 카테고리의 다른 글

[SWEA] 암호생성기  (0) 2021.08.05
[SWEA] 괄호 짝짓기  (0) 2021.08.05
[SWEA] 농작물 수확하기  (0) 2021.08.04
[SWEA] 상호의 배틀필드  (2) 2021.08.04
[SWEA] 달팽이 숫자  (0) 2021.08.03