SWEA_D4_1865
๐ [D4_1865] ๋์ฒ ์ด์ ์ผ ๋ถ๋ฐฐ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
static int N;
static double max;
static double[][] arr;
static boolean[] v;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
// ํ
์คํธ ์ผ์ด์ค
int tc = Integer.parseInt(br.readLine());
for (int t = 1; t <= tc; t++) {
sb.append("#").append(t).append(" ");
// N
N = Integer.parseInt(br.readLine());
// ๋ด๋น ๋ฐฐ์ด
arr = new double[N][N];
// ๋ฐฉ๋ฌธ ์ฒดํฌ
v = new boolean[N];
// ํ๋ฅ ์
๋ ฅ
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine(), " ");
for (int j = 0; j < N; j++) {
arr[i][j] = Double.parseDouble(st.nextToken());
arr[i][j] /= 100;
}
}
max = 0;
run(0,1.0);
String str = String.format("%.6f", max*100);
sb.append(str).append("\n");
}
System.out.println(sb);
}
static void run(int lev, double sum) {
// ๊ฐ์ง์น๊ธฐ ( ์๊ฐ๋ณต์ก๋๋ฅผ ์ค์ด๋๋ฐ ์ ์ผ ์ค์ )
if(sum <= max) return;
// ๊ธฐ์ ์กฐ๊ฑด
if (lev == N) {
max = Math.max(max, sum);
return;
}
for(int i=0; i<N; i++) {
// ์ด๋ฏธ ๋ฐฉ๋ฌธํ์ผ๋ฉด ํต๊ณผ
if(v[i]) continue;
// ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
v[i] = true;
// ์ฌ๊ท
run(lev+1, sum * arr[lev][i]);
// ๋ฐฑํธ๋ํน
v[i] = false;
}
}
}
๐ค ๋์ ์๊ฐ
์ฌ๊ท๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
๊ฐ์ ์ด์ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ boolean ๋ฐฐ์ด์ ํตํด ์ด ์์์ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์๊ณ
์ํํ์์ผ๋ก ์ฒดํฌ๋ฅผ ํด์ค๋ค.
๊ทธ๋ฌ๋ ์ฌ๊ธฐ์ ์ค์ํ ๊ฒ์ ๊ฐ์ง์น๊ธฐ์ด๋ค.
๊ฐ์ง์น๊ธฐ๋ฅผ ์ํด์ค๋ค๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋๋ค.
์๊ฐ ๋ณต์ก๋๋ฅผ ์ค์ด๊ธฐ์ ๊ฐ์ฅ ์ค์ํ ์ฝ๋๋ if(sum <= max) return;
์ด๋ค.
์ด ์ฝ๋๋ฅผ ํตํด ๊ตณ์ด ๋งจ ๋ฐ์ ํ๊น์ง ๊ฐ ํ์๊ฐ ์๋ ๊ฒ์ ๊ฐ์ง์น๊ธฐ ํด์ฃผ๋ฉด์ ์๊ฐ ๋ณต์ก๋๋ฅผ ํ ์ค์ฌ์ค๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก ์์ 6์๋ฆฌ๊น์ง ์ถ๋ ฅํด์ผํ๊ธฐ ๋๋ฌธ์ String.format
์ ํตํด ์ค์ ์ ํด์ค๋ค.