파리 퇴치!!
- 파리가 사는 영역은 N * N인 이차원 배열
- 파리채의 영역은 M * M인 이차원 배열
- 파리채의 좌측 상단을 기준으로 오른쪽, 아래 이동 하기
- 오른쪽: 열 +1
- 아래: 행+1
- 오른쪽 이동에서)방향 전환 조건1: 파리채 크기 M을 넘어서면 아래로 이동하기
- 아래쪽 이동에서)방향 전환 조건2: 아래로 온 다음은 바로 오른쪽으로 전환, M을 넘어서면 탐색 종료
- 방문할 때 만나는 파리 개수는 합한다.
- 파리의 합을 담아두는 리스트
- 리스트에서 최대 값을 구한다.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
for(int i=0; i<T; i++) {
st = new StringTokenizer(br.readLine(), " ");
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[][] fly = new int[n][n]; // 파리 배열 초기화
// 파리 배열 채우기
for(int f=0; f<n; f++) {
st = new StringTokenizer(br.readLine(), " ");
for(int fn=0; fn<n; fn++) {
fly[f][fn] = Integer.parseInt(st.nextToken());
}
}
int row = 0; // 파리채 좌측 상단 시작 행
int col = 0; // 파리채 촤즉 상단 시작 열
int maxSum = 0; //최대 파리 값
int combi = (n-m+1)*(n-m+1); // 파리채 구역 개수
// 파리 잡기
for(int c=0; c<combi; c++) {
int sum = 0; // 현재 파리채 파리 합
for(int j=0; j<m; j++) {
for(int k=0; k<m; k++) {
sum += fly[row+j][col+k];
}
}
if(sum >= maxSum) maxSum = sum; // 최대 값 업데이트
// 시작 좌표 이동
if(col == n-m){ // 마지막 열이면 다음행 이동
col = 0;
row += 1;
} else { // 다음 열 이동
col += 1;
}
}
sb.append("#").append(i+1).append(" ").append(maxSum).append("\n");
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
for(int i=0; i<T; i++) {
st = new StringTokenizer(br.readLine(), " ");
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[][] fly = new int[n][n]; // 파리 배열 초기화
// 파리 배열 채우기
for(int f=0; f<n; f++) {
st = new StringTokenizer(br.readLine(), " ");
for(int fn=0; fn<n; fn++) {
fly[f][fn] = Integer.parseInt(st.nextToken());
}
}
int maxSum = 0; //최대 파리 값
// 파리 잡기
for(int row=0; row<=n-m; row++) {
for(int col = 0; col<=n-m; col++) {
int sum = 0; // 현재 파리채 파리 합
for(int j=0; j<m; j++) {
for(int k=0; k<m; k++) {
sum += fly[row+j][col+k];
}
}
if(sum > maxSum) maxSum = sum;
}
}
sb.append("#").append(i+1).append(" ").append(maxSum).append("\n");
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}