문제링크
https://www.acmicpc.net/problem/14500
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N, M;
static int map[][];
static int res;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
map = new int[N][M];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < M; j++)
map[i][j] = Integer.parseInt(st.nextToken());
}
for(int i=0;i<N;i++) {
for(int j=0;j<M;j++) {
tetromino1(i, j);
tetromino2(i, j);
tetromino3(i, j);
tetromino4(i, j);
tetromino5(i, j);
}
}
System.out.println(res);
}
static void tetromino1(int row, int col) {
//0 0 0 0
//2가지 경우
int sum = 0;
if((col+3)<M) {
sum = map[row][col]+map[row][col+1]+map[row][col+2]+map[row][col+3];
res = Math.max(res, sum);
}
if((row+3)<N) {
sum = map[row][col]+map[row+1][col]+map[row+2][col]+map[row+3][col];
res = Math.max(res, sum);
}
}
static void tetromino2(int row, int col) {
int sum =0;
if(row+1<N && col+1<M) {
sum += map[row][col];
sum +=map[row+1][col];
sum +=map[row][col+1];
sum +=map[row+1][col+1];
res = Math.max(res, sum);
}
}
static void tetromino3(int row, int col) {
int sum = 0;
if((row+2)<N && (col+1)<M) {
sum = map[row][col] + map[row+1][col] + map[row+2][col] + map[row+2][col+1];
res = Math.max(res, sum);
}
if((row+1)<N && (col+2)<M) {
sum = map[row][col]+map[row][col+1]+map[row][col+2]+map[row+1][col];
res = Math.max(res, sum);
}
if((row+2)<N && (col+1)<M) {
sum = map[row][col]+map[row][col+1]+map[row+1][col+1]+map[row+2][col+1];
res = Math.max(res, sum);
}
if((row+1)<N && (col-2)>=0) {
sum = map[row][col]+map[row+1][col]+map[row+1][col-1]+map[row+1][col-2];
res = Math.max(res, sum);
}
if((row+2)<N && (col-1)>=0) {
sum =map[row][col]+map[row+1][col]+map[row+2][col]+map[row+2][col-1];
res = Math.max(res, sum);
}
if((row-1)>=0 && (col+2)<M) {
sum = map[row][col]+map[row][col+1]+map[row][col+2]+map[row-1][col];
res = Math.max(res, sum);
}
if((row+2)<N && (col+1)<M) {
sum = map[row][col]+map[row+1][col]+map[row+2][col]+map[row][col+1];
res = Math.max(res, sum);
}
if((row+1)<N && (col+2)<M) {
sum = map[row][col]+map[row][col+1]+map[row][col+2]+map[row+1][col+2];
res = Math.max(res, sum);
}
}
static void tetromino4(int row, int col) {
int sum = 0;
if((row+2)<N && (col+1)<M) {
sum = map[row][col]+map[row+1][col]+map[row+1][col+1]+map[row+2][col+1];
res = Math.max(res, sum);
}
if((row-1)>=0 && (col+2)<M) {
sum = map[row][col]+map[row][col+1]+map[row-1][col+1]+map[row-1][col+2];
res = Math.max(res, sum);
}
if((row+2)<N && (col-1)>=0) {
sum = map[row][col]+map[row+1][col]+map[row+1][col-1]+map[row+2][col-1];
res = Math.max(res, sum);
}
if((row+1)<N && (col+2)<M) {
sum = map[row][col]+map[row][col+1]+map[row+1][col+1]+map[row+1][col+2];
res = Math.max(res, sum);
}
}
static void tetromino5(int row, int col) {
int sum = 0;
if((row+1)<N && (col+2)<M) {
sum = map[row][col]+map[row][col+1]+map[row][col+2]+map[row+1][col+1];
res = Math.max(res, sum);
}
if((row+2)<N && (col-1)>=0) {
sum = map[row][col]+map[row+1][col]+map[row+2][col]+map[row+1][col-1];
res = Math.max(res, sum);
}
if((row-1)>=0 && (col+2)<M) {
sum = map[row][col]+map[row][col+1]+map[row][col+2]+map[row-1][col+1];
res = Math.max(res, sum);
}
if((row+2)<N && (col+1)<M) {
sum = map[row][col]+map[row+1][col]+map[row+2][col]+map[row+1][col+1];
res = Math.max(res, sum);
}
}
}
테스트케이스? 하나하나 다 돌려보면 됩니다.
중간에 런타임 에러나서 코드 중에 틀린 곳 있는지 찾다가 눈 빠지는 줄 알았다
위의 5가지의 경우의 수가 있다.
윗 줄부터 오른쪽으로 tetromino1->5까지 함수를 만들었습니다.
1번의 경우의 수는
2가지가 존재합니다.
2번의 경우의 수는
한 가지가 존재합니다.
3번의 경우의 수는
4번의 경우의 수는
5번의 경우의 수는
이렇게 존재합니다.
제 코드도 그림 순서대로 적혀있습니다.
'알고리즘 > 백준' 카테고리의 다른 글
[JAVA]백준_7569_토마토 (0) | 2021.03.15 |
---|---|
[JAVA]백준_7576_토마토 (0) | 2021.03.15 |
[JAVA]백준_2661_좋은순열 (0) | 2021.03.07 |
[JAVA]백준_2667_단지번호붙이기 (0) | 2021.03.06 |
[JAVA]백준_2023_신기한 소수 (0) | 2021.03.05 |