2 ๋ถ„ ์†Œ์š”

๐Ÿ“ [G5_14500] ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ

import java.io.*;
import java.util.*;

public class Main {
	static int N, M;
	static int[][] map;
	static boolean[][] v;
	static int max = Integer.MIN_VALUE;
	static int sum;
	static int[] dx = { 1, -1, 0, 0 };
	static int[] dy = { 0, 0, 1, -1 };

	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];

		// ๋ฐฉ๋ฌธ ์ฒดํฌ
		v = new boolean[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++) {
				v[i][j] = true;
                // ๊ฐ’์„ ๋”ํ•ด์ฃผ๊ณ  ๋“ค์–ด๊ฐ€๊ธฐ
                // ์ฒซ ์ขŒํ‘œ๋Š” ๊ณ ์ •
				sum = map[i][j];
				dfs(0, j, i);
                // ๋ฐฑํŠธ๋ž˜ํ‚น
				v[i][j] = false;
                // 'ใ…—' ๋ชจ์–‘ 4๊ฐ€์ง€ ํ™•์ธ
				check(j,i);
			}
		}

		// ์ตœ๋Œ“๊ฐ’ ์ถœ๋ ฅ
		System.out.println(max);
	}

	static void dfs(int idx, int x, int y) {
		// ๊ธฐ์ €์กฐ๊ฑด 4์นธ ์ด๋™ ( ์ฒ˜์Œ ๊ฐ’์€ ๋„ฃ์–ด์ฃผ๊ณ  ๋„˜์–ด ์˜จ๋‹ค )
		if (idx == 3) {
			max = Math.max(max, sum);
			return;
		}

		// 4๋ฐฉํ–ฅ ํƒ์ƒ‰
		int nx, ny;
		for (int i = 0; i < 4; i++) {
			nx = x + dx[i];
			ny = y + dy[i];

			// ๋ฒ”์œ„ ๋„˜์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ , ์ด๋ฏธ ๊ฐ”๋˜ ๊ฒฝ์šฐ
			if (nx < 0 || ny < 0 || nx > M - 1 || ny > N - 1 || v[ny][nx])
				continue;

			// ๋ฐฉ๋ฌธ ์ฒดํฌ
			v[ny][nx] = true;
			sum += map[ny][nx];
			dfs(idx + 1, nx, ny);

			// ๋ฐฑํŠธ๋ž˜ํ‚น
			v[ny][nx] = false;
			sum -= map[ny][nx];
		}
	}

	// ใ…— ๋ชจ์–‘ ๋”ฐ๋กœ ๊ฒ€์‚ฌ
	static void check(int x, int y) {
		// ใ…
		if (x >= 0 && y >= 0 && x + 1 < M && y + 2 < N) {
			max = Math.max(max, map[y][x] + map[y + 1][x] + map[y + 2][x] + map[y + 1][x + 1]);
		}

		// ใ…“
		if (x < M && y >= 0 && x - 1 >= 0 && y + 2 < N) {
			max = Math.max(max, map[y][x] + map[y + 1][x - 1] + map[y + 1][x] + map[y + 2][x]);
		}

		// ใ…œ
		if (x >= 0 && y >= 0 && x + 2 < M && y + 1 < N) {
			max = Math.max(max, map[y][x] + map[y][x + 1] + map[y][x + 2] + map[y + 1][x + 1]);
		}

		// ใ…—
		if (x + 1 < M && y >= 0 && x - 1 >= 0 && y + 1 < N) {
			max = Math.max(max, map[y][x] + map[y + 1][x - 1] + map[y + 1][x] + map[y + 1][x + 1]);
		}
	}
}

๐Ÿค” ๋‚˜์˜ ์ƒ๊ฐ

์ฒ˜์Œ์— ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ์ผ๋‹จ ๋Œ€์นญ, ํšŒ์ „๋˜์–ด์„œ ๊ทธ๋ ค์ง€๋Š” ๊ทธ๋ฆผ์„ ๋‹ค ๊ทธ๋ ค๋ณด์•˜๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์™„ํƒ์ธ ๊ฒƒ์€ ๋Š๊ผˆ์ง€๋งŒ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ• ์ง€ ๋ฐ”๋กœ ๊ฐ์ด ์žกํžˆ์ง€ ์•Š๋‹ค๊ฐ€
6์กฐ๊ฐ์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๋‹ค ๊ฑฐ์น˜๋Š” ๊ฒƒ์ด์˜€๋‹ค.
๊ทธ๋ž˜์„œ for๋ฌธ์œผ๋กœ ๋‹ค ๋Œ๋ฉด์„œ ํ•œ ์  ๋งˆ๋‹ค dfs๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ด ์ฃผ์—ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ํ•œ๊ฐ€์ง€ ๋†“์นœ๊ฒŒ ์žˆ์—ˆ๋‹ค.
๋ฐ”๋กœ !! โ€˜ใ…—โ€™ ์ด ๊ฒƒ์ด๋‹ค.
์ด ๋ชจ์–‘์€ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์œผ๋กœ ์ฐพ์•„์ง€์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ž˜์„œ ๋”ฐ๋กœ ๋นผ์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์—ˆ๋‹ค.
์–ด๋–ป๊ฒŒ ๋ณด๋ฉด ์ด ๋ฌธ์ œ์˜ ์†์ž„์ˆ˜? ์ธ ๊ฒƒ ๊ฐ™๋‹ค.
๊ฒฐ๊ตญ ์™„ํƒ์—์„œ dfs๋ฅผ ํ™œ์šฉํ•˜๊ณ  โ€˜ใ…โ€™ ๋ชจ์–‘ 4๊ฐ€์ง€๋ฅผ ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค !!


ํƒœ๊ทธ: , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: