[Kakao]2020 KAKAO BLIND RECRUITMENT - 외벽 점검 Java 풀이
문제
외벽 점검 문제 풀기 바로가기
풀이 과정
- 재귀함수를 사용한 완전탐색으로 풀어준다.
결과
import java.util.*;
class Solution {
private int n, many;
private int[] weak, dist;
private boolean finish;
public int solution(int n, int[] weak, int[] dist) {
this.n = n;
this.weak = weak;
this.dist = dist;
Arrays.sort(dist);
for(int i = 1; i <= dist.length; i++){
many = i;
calculator(0, 0, new int[many]);
if(finish)
return many;
}
return -1;
}
public void calculator(int depth,int start, int[] visit){
if(finish)
return;
if(depth == many){
check(visit);
return;
}
for(int i = start; i < weak.length; i++){
visit[depth] = i;
calculator(depth+1, i+1, visit);
if(finish)
break;
}
}
public void check(int[] visit){
int[] diff = new int[many];
for(int i = 0; i < many; i++){
diff[i] = weak[visit[(i+1) % many] ==0 ? weak.length-1 : visit[(i+1) % many] -1] - weak[visit[i]];
if(diff[i] < 0)
diff[i] = n + diff[i];
}
Arrays.sort(diff);
finish = getFinish(diff);
}
public boolean getFinish(int[] value){
for(int i = 0; i < many; i++){
if(value[many-1-i] > dist[dist.length-1-i])
return false;
}
return true;
}
}