From a1362a472dce51a8772cf884b59d70168f42d00e Mon Sep 17 00:00:00 2001 From: nathan29849 Date: Fri, 24 Feb 2023 19:20:12 +0900 Subject: [PATCH] =?UTF-8?q?[nathan]=20=EC=99=B8=EB=B2=BD=EC=A0=90=EA=B2=80?= =?UTF-8?q?=200224=20java=20=ED=92=80=EC=9D=B4=20=EC=8B=A4=ED=8C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\262\275\354\240\220\352\262\2000224.java" | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 "nathan/java/src/main/java/org/example/feb/\354\231\270\353\262\275\354\240\220\352\262\2000224.java" diff --git "a/nathan/java/src/main/java/org/example/feb/\354\231\270\353\262\275\354\240\220\352\262\2000224.java" "b/nathan/java/src/main/java/org/example/feb/\354\231\270\353\262\275\354\240\220\352\262\2000224.java" new file mode 100644 index 0000000..38d94cb --- /dev/null +++ "b/nathan/java/src/main/java/org/example/feb/\354\231\270\353\262\275\354\240\220\352\262\2000224.java" @@ -0,0 +1,108 @@ +package org.example.feb; + +import java.util.ArrayList; +import java.util.List; + +public class 외벽점검0224 { + + public static void main(String[] args) { + 외벽점검0224 m = new 외벽점검0224(); + int result = m.solution(10, new int[]{2, 3, 5}, new int[]{2, 2}); + System.out.println(result); + } + + int dLength; + List> results = new ArrayList<>(); + + public int solution(int n, int[] weak, int[] dist) { + int answer = Integer.MAX_VALUE; + dLength = dist.length; + int[] newWeak = makeNewWeak(weak, n); + dfs(new ArrayList<>(), new boolean[dLength], dist); + + for (List tmp : results) { + int pre = weak[0]; + int idx = 0; + int cnt = 0; + boolean flag = true; + for (int i = 1; i < weak.length; i++) { + if (weak[i] - pre > tmp.get(idx)) { + // 도달할 수 없을 떄 + cnt++; + pre = weak[i]; + idx++; + if (idx == tmp.size()) { + flag = false; + break; + } + } else { + if (i == weak.length-1) { + cnt++; + } + } + } + + if (flag) { + answer = Math.min(answer, cnt); + } + + + pre = newWeak[0]; + idx = 0; + cnt = 0; + flag = true; + for (int i = 1; i < weak.length; i++) { + if (newWeak[i] - pre > tmp.get(idx)) { + // 도달할 수 없을 떄 + cnt++; + pre = weak[i]; + idx++; + if (idx == tmp.size()) { + flag = false; + break; + } + } else { + if (i == weak.length-1) { + cnt++; + } + } + } + if (flag) { + answer = Math.min(answer, cnt); + } + } + + if (answer == Integer.MAX_VALUE) { + return -1; + } + return answer; + } + + int[] makeNewWeak(int[] weak, int n) { + int weakLength = weak.length; + int[] newWeak = new int[weakLength]; + for (int i = 1; i < weakLength; i++) { + newWeak[i-1] = weak[i]; + } + newWeak[weakLength-1] = n + weak[0]; + return newWeak; + } + + void dfs(List arr, boolean[] visited, int[] dist){ + if (arr.size() == dLength) { + results.add(arr); + return; + } + + for (int i = 0; i < dLength; i++) { + if (!visited[i]) { + visited[i] = true; + List tmp = new ArrayList<>(arr); + tmp.add(dist[i]); + dfs(tmp, visited, dist); + visited[i] = false; + } + } + } + +}