๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 3980_์„ ๋ฐœ ๋ช…๋‹จ

๋ฟŒ์•ผ._. 2024. 3. 8. 11:40

Gold V

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

< ์„ ๋ฐœ ๋ช…๋‹จ >

 

๋ฌธ์ œ ํ’€์ด 

 

ํฌ์ง€์…˜์— ์„ ์ˆ˜๋ฅผ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๋Šฅ๋ ฅ์น˜์˜ ํ•ฉ์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•œ๋‹ค.

 

 

 my solution (Java)

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

public class _3980_ { // ์„ ๋ฐœ ๋ช…๋‹จ
	static int arr[][], answer[], result;
	static boolean visited[];

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

		int c = Integer.parseInt(bf.readLine());

		arr = new int[11][11];
		answer = new int[11];
		visited = new boolean[11];

		for (int i = 0; i < c; i++) {
			result = 0;
			for (int j = 0; j < 11; j++) {
				st = new StringTokenizer(bf.readLine());
				for (int k = 0; k < 11; k++) {
					arr[j][k] = Integer.parseInt(st.nextToken());
				}
			}
			team(0);
			bw.write(result + "\n");
		}
		bw.flush();
	}

	private static void team(int idx) {
		if (idx == 11) {
			int sum = 0;
			for (int i = 0; i < 11; i++) {
				sum += answer[i];
			}
			result = Math.max(result, sum);
			return;
		}
		for (int i = 0; i < 11; i++) {
			if (!visited[i] && arr[i][idx] > 0) {
				visited[i] = true;
				answer[idx] = arr[i][idx];
				team(idx + 1);
				visited[i] = false;
			}
		}
	}
}
๋ณ€์ˆ˜)
c : ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฐœ์ˆ˜
arr : ์„ ์ˆ˜์˜ ๋Šฅ๋ ฅ
answer : ๊ฐ ํฌ์ง€์…˜์— ๋ฐฐ์น˜ํ•œ ์„ ์ˆ˜์˜ ๋Šฅ๋ ฅ
visited : ์„ ์ˆ˜ ๋ฐฐ์น˜ ์—ฌ๋ถ€

 

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฐœ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฐœ์ˆ˜๋งŒํผ ๋‹ค์Œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

1) 11๋ช…์˜ ๋Šฅ๋ ฅ์„ ์ž…๋ ฅ๋ฐ›์•„ arr ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค.

2) ๊ฐ ํฌ์ง€์…˜์— ์„ ์ˆ˜๋ฅผ ๋ฐฐ์น˜ํ•˜๊ธฐ ์œ„ํ•ด team ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

3) ๋Šฅ๋ ฅ์น˜์˜ ํ•ฉ์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

team (int idx)

1) idx๊ฐ€ 11์ด๋ฉด ๋ชจ๋“  ํฌ์ง€์…˜์— ์„ ์ˆ˜๋ฅผ ๋ฐฐ์น˜ํ–ˆ๋‹จ ๋œป์ด๋ฏ€๋กœ ๋Šฅ๋ ฅ์น˜์˜ ํ•ฉ์„ ๊ตฌํ•œ ํ›„ ์ตœ๋Œ“๊ฐ’์ธ์ง€ ํŒ๋‹จํ•˜๊ณ  ์ข…๋ฃŒํ•œ๋‹ค.

2) idx๋ฒˆ์งธ ํฌ์ง€์…˜์— ์„ ์ˆ˜๋ฅผ ๋ฐฐ์น˜ํ•˜๊ธฐ ์œ„ํ•ด 11๋ช…์˜ ์„ ์ˆ˜๋ฅผ ๋‘˜๋Ÿฌ๋ณด๋ฉฐ ์•„์ง ๋ฐฐ์น˜ํ•˜์ง€ ์•Š์€ ์„ ์ˆ˜์ด๋ฉฐ ๋Šฅ๋ ฅ์น˜๊ฐ€ 0๋ณด๋‹ค ํฌ๋‹ค๋ฉด ์„ ์ˆ˜๋ฅผ ๋ฐฐ์น˜ํ•œ๋‹ค. ๊ทธ๋‹ค์Œ idx+1๋ฒˆ์งธ ํฌ์ง€์…˜์— ์„ ์ˆ˜๋ฅผ ๋ฐฐ์น˜ํ•˜๊ธฐ ์œ„ํ•ด team(idx+1)์„ ํ˜ธ์ถœํ•œ๋‹ค. idx๋ฒˆ์งธ ํฌ์ง€์…˜์— ๋‹ค๋ฅธ ์„ ์ˆ˜๋ฅผ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์œผ๋ฏ€๋กœ ๋ฐฐ์น˜ ์—ฌ๋ถ€๋ฅผ ๋˜๋Œ๋ฆฐ๋‹ค.