From cbad5a1cc35bc591135abe2559c96af920d4cd3f Mon Sep 17 00:00:00 2001 From: lkhyun <102892446+lkhyun@users.noreply.github.com> Date: Wed, 13 Aug 2025 22:24:54 +0900 Subject: [PATCH] =?UTF-8?q?[20250813]=20BOJ=20/=20G3=20/=20=EC=9A=B0?= =?UTF-8?q?=EC=A3=BC=20=ED=83=90=EC=82=AC=EC=84=A0=20/=20=EC=9D=B4?= =?UTF-8?q?=EA=B0=95=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4 \355\203\220\354\202\254\354\204\240.md" | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 "lkhyun/202508/13 BOJ G3 \354\232\260\354\243\274 \355\203\220\354\202\254\354\204\240.md" diff --git "a/lkhyun/202508/13 BOJ G3 \354\232\260\354\243\274 \355\203\220\354\202\254\354\204\240.md" "b/lkhyun/202508/13 BOJ G3 \354\232\260\354\243\274 \355\203\220\354\202\254\354\204\240.md" new file mode 100644 index 00000000..bab42fe8 --- /dev/null +++ "b/lkhyun/202508/13 BOJ G3 \354\232\260\354\243\274 \355\203\220\354\202\254\354\204\240.md" @@ -0,0 +1,58 @@ +```java +import java.io.*; +import java.util.*; + +public class Main { + static int ans; + static int N,K; + static int[][] dist; + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + K = Integer.parseInt(st.nextToken()); + + dist = new int[N][N]; + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + for (int j = 0; j < N; j++) { + dist[i][j] = Integer.parseInt(st.nextToken()); + } + } + + for (int k = 0; k < N; k++) { + for (int i = 0; i < N; i++) { + for (int j = 0; j < N; j++) { + dist[i][j] = Math.min(dist[i][j], dist[i][k] + dist[k][j]); + } + } + } + + ans = Integer.MAX_VALUE; + boolean[] visited = new boolean[N]; + visited[K] = true; + find(visited,1,0,K); + + bw.write(ans + ""); + bw.close(); + } + + static void find(boolean[] visited, int depth, int sum, int prev){ + if(depth == N){ + ans = Math.min(ans,sum); + return; + } + if(sum >= ans) return; + for (int i = 0; i < N; i++) { + if(!visited[i]){ + visited[i] = true; + find(visited, depth+1,sum+dist[prev][i], i); + visited[i] = false; + } + } + } + +} +```