Skip to content

Commit 055b153

Browse files
committedJul 3, 2024
Programmers_60062 : 외벽 점검
1 parent d8f562a commit 055b153

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
private boolean[] visited;
5+
private int[] weak;
6+
private int[] dist;
7+
private int answer;
8+
9+
public int solution(int n, int[] _weak, int[] _dist) {
10+
weak = _weak;
11+
dist = _dist;
12+
answer = Integer.MAX_VALUE;
13+
visited = new boolean[n];
14+
int len = weak.length;
15+
for(int i=0; i<len; i++) {
16+
int[] weakArr = new int[len];
17+
for(int j=0; j<len; j++) {
18+
int index = (j+i)%len;
19+
if((j+i)/len >= 1) {
20+
weakArr[j] = weak[index] + n;
21+
}else {
22+
weakArr[j] = weak[index];
23+
}
24+
}
25+
26+
for(int j=1; j<=dist.length; j++) {
27+
dfs(weakArr, new int[j], 0);
28+
}
29+
}
30+
return (answer == Integer.MAX_VALUE) ? -1 : answer;
31+
}
32+
33+
public void dfs(int[] weakArr, int[] arr, int index) {
34+
if(index == arr.length) {
35+
check(weakArr, arr);
36+
return;
37+
}
38+
39+
for(int i=0; i<dist.length; i++) {
40+
if(!visited[i]) {
41+
arr[index] = dist[i];
42+
visited[i] = true;
43+
dfs(weakArr, arr, index+1);
44+
visited[i] = false;
45+
}
46+
}
47+
}
48+
49+
public void check(int[] weakArr, int[] arr) {
50+
int weakIndex = 0;
51+
int arrIndex = 0;
52+
while(weakIndex < weakArr.length && arrIndex < arr.length) {
53+
int start = weakArr[weakIndex];
54+
int end = start + arr[arrIndex];
55+
while(weakArr[weakIndex] <= end) {
56+
weakIndex++;
57+
if(weakIndex == weakArr.length) {
58+
break;
59+
}
60+
}
61+
arrIndex++;
62+
}
63+
if(weakIndex == weakArr.length) {
64+
answer = Math.min(answer, arr.length);
65+
}
66+
}
67+
}

0 commit comments

Comments
 (0)