Contents

[Kakao]2020 KAKAO BLIND RECRUITMENT - 외벽 점검 Java 풀이

   Jan 4, 2021     2 min read     - Comments

문제


외벽 점검 문제 풀기 바로가기


풀이 과정


  1. 재귀함수를 사용한 완전탐색으로 풀어준다.


결과


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;
    }
}