반응형
https://www.acmicpc.net/problem/4920
rotate와 배열돌리기를 적절히 활용해서 문제를 풀었다.
주의 할점은 100만 이하의 절대값인 수가 입력으로 들어온다. 따라서 long값과 sovle의 범위초과할때 Long.MINVALUE를 해주면 쉽게 구현할 수 있다.
package ps;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class B4920 {
static long Map[][] = new long[100][100];
static int N;
static long ans;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
boolean block[][][] = {
{ { true, true, true, true } },
{ { true, true, false }, { false, true, true } },
{ { true, true, true }, { false, false, true } },
{ { true, true, true }, { false, true, false } },
{ { true, true }, { true, true } } };
int t=0;
while (0 != (N = Integer.parseInt(br.readLine().trim()))) {
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine().trim());
for (int j = 0; j < N; j++) {
Map[i][j] = Long.parseLong(st.nextToken().trim());
}
}
// 조사를 해보자
ans = Long.MIN_VALUE;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
for (int k = 0; k < 5; k++) {
for (int d = 0; d < 4; d++) {
ans = Math.max(ans, Solve(i,j,block[k]));
//rotate
block[k] = Rotate(block[k]);
}
}
}
}
sb.append(++t).append('.').append(' ');
sb.append(ans).append('\n');
}
System.out.println(sb.toString());
}
public static boolean[][] Rotate(boolean[][] block) {
int r = block.length;
int c = block[0].length;
boolean copy[][] = new boolean[c][r];
for (int i = 0; i < c; i++) {
for (int j = 0; j < r; j++) {
copy[i][j] = block[r-1-j][i];
}
}
return copy;
}
public static long Solve(int y, int x, boolean[][] block) {
int r = block.length;
int c = block[0].length;
if (y + r > N)
return Long.MIN_VALUE;
if (x + c > N)
return Long.MIN_VALUE;
long cnt = 0;
for (int i = y, rr = 0; i < y + r && rr < r; i++, rr++) {
for (int j = x, cc = 0; j < x + c && cc < c; j++, cc++) {
if (block[rr][cc]) {
cnt += Map[i][j];
}
}
}
return cnt;
}
}
반응형
'ProgramSoliving' 카테고리의 다른 글
백준 : 11585 속터지는 저녁 메뉴 (0) | 2020.07.13 |
---|---|
백준 : 1305 (광고) java (0) | 2020.07.13 |
백준 : 18809 (0) | 2020.05.30 |
백준 : 18808 스티커 붙이기 (0) | 2020.05.30 |
백준 : 4889 안정적인 문자열 (0) | 2020.05.30 |