CS/알고리즘_KAKAO BLIND RECRUITMENT

2020 KAKAO BLIND RECRUITMENT : 외벽 점검(리뷰 필요)

Jedy_Kim 2021. 10. 14. 12:07
728x90

https://programmers.co.kr/learn/courses/30/lessons/60062

 

코딩테스트 연습 - 외벽 점검

레스토랑을 운영하고 있는 "스카피"는 레스토랑 내부가 너무 낡아 친구들과 함께 직접 리모델링 하기로 했습니다. 레스토랑이 있는 곳은 스노우타운으로 매우 추운 지역이어서 내부 공사를 하

programmers.co.kr

// 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import java.util.*;
 
class Solution {
    
    static final int INF = Integer.MAX_VALUE;
    
    int MinCnt;
    int N;
    int[] Weak;
    int[] Dist;
    
    // 메서드 : 친구명수(x), 취약점 시작할 위치(idx), 각 취약점의 방문여부(visited) 
    void getResult(int x, int idx, int visited) {
        
        if(x > Dist.lengthreturn;
        if(x >= MinCnt) return;
        
        for(int i=0; i<Weak.length++i) {
            int nextPos = (idx + i) % Weak.length;  
            int diff = Weak[nextPos] - Weak[idx];
            
            if(nextPos < idx) diff += N;
            
            if(diff > Dist[Dist.length - x]) break;
            
            visited |= 1 << nextPos; 
        } 
        if(visited == (1 << Weak.length- 1) {
            MinCnt = x;
            return;
        }  
         
        for(int i=0; i<Weak.length++i) {
            if((visited & (1 << i)) != 0continue;
            getResult(x + 1, i, visited);
        }
         
    } 
    
    public int solution(int n, int[] weak, int[] dist) {
        
        Arrays.sort(dist);
        N      = n;
        Weak   = weak;
        Dist   = dist;
        MinCnt = INF;
        
        for(int i=0; i<Weak.length++i) {
            getResult(1, i, 0);
        }
        
        if(MinCnt == INF) return -1;
         
        return MinCnt;
    }
}
cs
반응형