728x90
이차원 배열의 사방탐색과 팔방탐색 유형이다.
먼저 +형태를 훑고, 그 다음 x형태를 훑으며 가장 큰 sum의 값을 업데이트 해주었다.
+형태의 dr, dc 배열과 x형태의 dr, dc배열을 각각 정의하여 루프를 돌아서 sum을 구하였다.
package SWEA0729;
import java.util.Scanner;
public class SWEA_12712_파리퇴치3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int t = 0; t < T; t++) {
int N = sc.nextInt();
int M = sc.nextInt();
int sum = 0;
int[][] arr = new int[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
arr[i][j] = sc.nextInt();
}
}
// + 형태
int[] dr = { -1, 1, 0, 0 };
int[] dc = { 0, 0, 1, -1 };
for (int r = 0; r < N; r++) {
for (int c = 0; c < N; c++) {
int tmp = arr[r][c];
for (int m = 1; m < M; m++) {
for (int d = 0; d < 4; d++) {
int nr = r + dr[d] * m;
int nc = c + dc[d] * m;
if (nr >= 0 && nr < N && nc >= 0 && nc < N) {
tmp += arr[nr][nc];
}
}
}
if (tmp > sum) {
sum = tmp;
}
}
}
// x 형태
int[] drx = { -1, 1, -1, 1 };
int[] dcx = { -1, 1, 1, -1 };
for (int r = 0; r < N; r++) {
for (int c = 0; c < N; c++) {
int tmp = arr[r][c];
for (int m = 1; m < M; m++) {
for (int d = 0; d < 4; d++) {
int nr = r + drx[d] * m;
int nc = c + dcx[d] * m;
if (nr >= 0 && nr < N && nc >= 0 && nc < N) {
tmp += arr[nr][nc];
}
}
}
if (tmp > sum) {
sum = tmp;
}
}
}
System.out.printf("#%d %d\n", t + 1, sum);
}
}
}
728x90
'문제 풀이 > SWEA' 카테고리의 다른 글
[SWEA] 6190 - 정곤이의 단조 증가하는 수 (자바/Java) (0) | 2022.08.11 |
---|---|
[SWEA] 1954 - 달팽이 숫자 (자바/Java) (0) | 2022.08.10 |
[SWEA] 1208 - Flattern (자바/Java) 배열, 우선순위 큐(힙) (0) | 2022.08.09 |
[SWEA] 4789 - 성공적인 공연 기획 (자바 / Java) (0) | 2022.08.09 |
[SWEA] 1220 - Magnetic (자바/Java) (0) | 2022.07.29 |