Skip to content

Commit d691f16

Browse files
committed
[D2] Title: 파리퇴치3, Time: 5 ms, Memory: 404 KB -BaekjoonHub
1 parent ac9fb2a commit d691f16

1 file changed

Lines changed: 87 additions & 80 deletions

File tree

Lines changed: 87 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,87 +1,94 @@
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

Comments
 (0)