1- #include < iostream>
2- #include < vector>
3- #include < algorithm>
1+ import java.util.*;
2+ import java.io.FileInputStream;
43
5- using namespace std ;
6-
7- int pari (vector<vector<int >> &array, int N , int M){
8-
9- int max = -1 ;
4+ class Solution
5+ {
6+ public static void main (String args[]) throws Exception
7+ {
8+ Scanner sc = new Scanner (System.in );
9+ int T;
10+ T=sc.nextInt ();
1011
11- for (int i=0 ; i<N; i++){
12- for (int j=0 ; j<N; j++){
13- int sum1 = 0 , sum2 =0 ;
14- // 정방향
15- for (int k=j-M+1 ; k<=j+M-1 ; k++){
16- if (k>=0 && k<N){
17- sum1 += array[i][k];
18- }
19- }
20- for (int k=i-M+1 ; k<=i+M-1 ; k++){
21- if (k>=0 && k<N){
22- sum1 += array[k][j];
12+ for (int test_case = 1 ; test_case <= T; test_case++)
13+ {
14+
15+ int N, M, num;
16+ N = sc.nextInt ();
17+ M = sc.nextInt ();
18+
19+ int map[][] = new int [N][N];
20+
21+ for (int i=0 ; i<N; i++){
22+ for (int j=0 ; j<N; j++){
23+ num = sc.nextInt ();
24+ map[i][j] = num;
2325 }
2426 }
25- sum1 -= array[i][j];
26- if (max < sum1) max = sum1;
27-
28- // 대각선방향
29- for (int k=1 ; k<M; k++){
30- if (i-k >=0 && j-k>=0 ) {
31- sum2 += array[i - k][j - k];
32- }
33- if (i+k<N && j+k < N){
34- sum2 += array[i+k][j+k];
35- }
36- if (i-k >=0 && j+k < N){
37- sum2 += array[i-k][j+k];
38- }
39- if (i+k < N && j-k >=0 ){
40- sum2 += array[i+k][j-k];
27+
28+
29+ int max = -1 ;
30+
31+
32+ // (i,j)에서 M칸 검사
33+ for (int i=0 ; i<N; i++){
34+ for (int j=0 ; j<N; j++){
35+ int sum = map[i][j];
36+ int total = map[i][j];
37+
38+ // 정방향 검사
39+ for (int k=M-1 ; k>=1 ; k--){
40+ // 좌
41+ if (j-k>=0 ){
42+ sum += map[i][j-k];
43+ }
44+ // 우
45+ if (j+k < N){
46+ sum += map[i][j+k];
47+ }
48+ // 상
49+ if (i-k>=0 ){
50+ sum += map[i-k][j];
51+ }
52+ // 하
53+ if (i+k<N){
54+ sum += map[i+k][j];
55+ }
56+ }
57+
58+ // 대각선 검사
59+ for (int k=M-1 ; k>=1 ; k--){
60+ // left up
61+ if (i-k>=0 && j-k>=0 ){
62+ total += map[i-k][j-k];
63+ }
64+ // right up
65+ if (i-k>=0 && j+k<N){
66+ total += map[i-k][j+k];
67+ }
68+ // right down
69+ if (i+k<N && j+k<N){
70+ total += map[i+k][j+k];
71+ }
72+ // left down
73+ if (i+k<N && j-k>=0 ){
74+ total += map[i+k][j-k];
75+ }
76+ }
77+
78+
79+
80+ // 대소비교
81+ total = Math.max (sum, total);
82+ max = Math.max (max, total);
83+
84+
4185 }
4286 }
43- sum2 += array[i][j];
44- if (max < sum2) max = sum2;
45-
46- }
47- }
48-
49- return max;
50-
51- }
52-
53- int main (int argc, char ** argv)
54- {
55- int test_case;
56- int T;
57- /*
58- 아래의 freopen 함수는 input.txt 를 read only 형식으로 연 후,
59- 앞으로 표준 입력(키보드) 대신 input.txt 파일로부터 읽어오겠다는 의미의 코드입니다.
60- //여러분이 작성한 코드를 테스트 할 때, 편의를 위해서 input.txt에 입력을 저장한 후,
61- freopen 함수를 이용하면 이후 cin 을 수행할 때 표준 입력 대신 파일로부터 입력을 받아올 수 있습니다.
62- 따라서 테스트를 수행할 때에는 아래 주석을 지우고 이 함수를 사용하셔도 좋습니다.
63- freopen 함수를 사용하기 위해서는 #include <cstdio>, 혹은 #include <stdio.h> 가 필요합니다.
64- 단, 채점을 위해 코드를 제출하실 때에는 반드시 freopen 함수를 지우거나 주석 처리 하셔야 합니다.
65- */
66- // freopen("input.txt", "r", stdin);
67- cin>>T;
68- /*
69- 여러 개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
70- */
71- for (test_case = 1 ; test_case <= T; ++test_case)
72- {
73-
74- int N, M;
75- cin >> N >> M;
76- vector<vector<int >> array (N, vector<int >(N));
77- for (int i=0 ; i<N; i++){
78- for (int j=0 ; j<N; j++){
79- cin >> array[i][j];
80- }
81- }
82-
83- cout <<" #" << test_case <<" " <<pari (array, N, M) << " \n " ;
84-
85- }
86- return 0 ;// 정상종료시 반드시 0을 리턴해야합니다.
87+
88+
89+ System.out .println (" #" + test_case + " " + max);
90+
91+
92+ }
93+ }
8794}
0 commit comments