👀 문제 설명
로그인해야 문제를 볼 수 있다.
✍🏻풀이
시작점 (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 |