๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 18290_NM๊ณผ K (1)

๋ฟŒ์•ผ._. 2024. 4. 29. 11:03

Silver I

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/18290)

< NM๊ณผ K(1) >

 

๋ฌธ์ œ ํ’€์ด 

 

๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๋‹ค ๊ตฌํ•˜๋ฉฐ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•œ๋‹ค.

 

 my solution (Java)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class _18290_ { // NM๊ณผ K (1)
	static int arr[][], result;
	static boolean visited[][];
	static int dx[] = { -1, 1, 0, 0 };
	static int dy[] = { 0, 0, -1, 1 };

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(bf.readLine());

		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
		int k = Integer.parseInt(st.nextToken());

		arr = new int[n][m];
		visited = new boolean[n][m];
		result = Integer.MIN_VALUE;

		for (int i = 0; i < n; i++) {
			st = new StringTokenizer(bf.readLine());
			for (int j = 0; j < m; j++) {
				arr[i][j] = Integer.parseInt(st.nextToken());
			}
		}

		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				visited[i][j] = true;
				search(k - 1, arr[i][j]);
				visited[i][j] = false;
			}
		}

		System.out.println(result);
	}

	private static void search(int k, int sum) {
		if (k == 0) {
			result = Math.max(result, sum);
			return;
		}

		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[0].length; j++) {
				if (visited[i][j]) {
					continue;
				}
				boolean flag=false;
				for (int l = 0; l < 4; l++) {
					int a = i + dx[l];
					int b = j + dy[l];
					if (a >= 0 && a < arr.length && b >= 0 && b < arr[0].length) {
						if (visited[a][b]) {
							flag=true;
							break;
						} 
					}
				}
				if (!flag) {
					visited[i][j] = true;
					search(k - 1, sum + arr[i][j]);
					visited[i][j] = false;
				}
			}
		}
	}
}
๋ณ€์ˆ˜)
n, m, k : ๊ฒฉ์žํŒ ํฌ๊ธฐ, ์„ ํƒํ•  ๊ฐœ์ˆ˜
arr : ๊ฒฉ์žํŒ ์ •๋ณด
visited : ์„ ํƒ ์—ฌ๋ถ€
result : ์ตœ๋Œ“๊ฐ’

 

n, m , k๊ฐ’์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ๊ฒฉ์žํŒ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ arr์— ์ €์žฅํ•œ๋‹ค. ๊ฒฉ์žํŒ์„ ์ „์ฒด ํƒ์ƒ‰ํ•˜๋ฉด์„œ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•œ ํ›„ search ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์ข…๋ฃŒ๋˜๋ฉด ๋‹ค์Œ ์„ ํƒ์„ ์œ„ํ•ด ์„ ํƒ ํ‘œ์‹œ๋ฅผ ํ•ด์ œํ•œ๋‹ค.

 

์ตœ์ข… ์ตœ๋Œ“๊ฐ’์ธ result๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

search(๋‚จ์€ ์„ ํƒ ์ˆ˜, ํ•ฉ)

์„ ํƒ์„ ๋‹ค ํ–ˆ๋‹ค๋ฉด ์ตœ๋Œ“๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•œ ํ›„ ์ข…๋ฃŒํ•œ๋‹ค.

 

๊ฒฉ์žํŒ์„ ์ „์ฒด ํƒ์ƒ‰ํ•˜๋ฉด์„œ ์ด๋ฏธ ์„ ํƒ๋œ ๊ณณ์ด๋ผ๋ฉด ๋‹ค์Œ ํƒ์ƒ‰์„ ํ•œ๋‹ค. ์„ ํƒ๋œ ๊ณณ์ด ์•„๋‹ˆ๋ผ๋ฉด ์ƒํ•˜์ขŒ์šฐ๋ฅผ ์‚ดํŽด๋ณด๋ฉฐ ์„ ํƒ๋œ ๊ณณ์ด ์žˆ๋Š”์ง€ ํŒ๋‹จํ•œ๋‹ค. ์„ ํƒ๋œ ๊ณณ์ด ์žˆ๋‹ค๋ฉด ๊ทธ ์นธ์€ ์„ ํƒํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋‹ค์Œ ํƒ์ƒ‰์„ ํ•œ๋‹ค. ์„ ํƒ๋œ ๊ณณ์ด ์—†๋‹ค๋ฉด ๊ทธ ์นธ์„ ์„ ํƒํ•œ ํ›„ search ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ํ˜ธ์ถœ์ด ๋๋‚˜๋ฉด ๋‹ค์Œ ํƒ์ƒ‰์„ ์œ„ํ•ด ์„ ํƒ์„ ํ•ด์ œํ•œ๋‹ค.