Mock Interview: Google #5 ?

JJ·2021년 3월 25일
0

MockTest

목록 보기
13/60

Next Closest Time

class Solution {
    public String nextClosestTime(String time) {
        StringBuilder sb = new StringBuilder();
        
        Map<Character, Integer> avail = new HashMap<Character, Integer>();
        
        char[] larger = new char[5];
        larger = time.toCharArray();
        Arrays.sort(larger);
        
        for (int j = 0; j < 4; j++) {
            avail.put(larger[j], j);
        }
        
        boolean found = false;
        int l = 4; 
        while (l >= 0 && ! found) {
            if (avail.get(l) < 3) {
                found = true; 
            } else {
                l--; 
            }
        }
        return null;
        
    }
    
    
    private int larger(String time, int loc) {
       
        
        return 0; 
    }
}

다 풀진 못했읍니다..
일단 사이즈별로 정렬
뒤에서부터 앞으로 오는데 혹시 들어갈 수 있는 더 큰 숫자가 있으면 그걸로 냅다 바꿔줌
그거보다 앞에 있는 것은 원래 것으로 유지
그거보다 뒤에 있는 것은 가장 작은 숫자로 바꿔치기

이렇게 하려고 했는데 limit들을 못걸고 끝냄..
리밋은
ㅁㅁ:ㅁㅁ
첫: 0, 1, 2만 가능
둘: 0, 1일때는 다 가능, 2면 0, 1, 2, 3 만 가능
셋: 0-5까지만 가능
넷: 다 가능

이런 constraints들을 넣지 못했다는점..
전씨 풀었다는데 대단해요^^

K Empty Slots

class Solution {
    public int kEmptySlots(int[] bulbs, int k) {
        //create ranges
        
        int[] ranges = new int[bulbs.length];
        
        ranges[bulbs[0]] = 1;
        
        boolean found = false; 
        
        for (int i = 1; i < bulbs.length; i++) {
            ranges[bulbs[i - 1]] = 1;
            
            if (i > k && ranges[bulbs[i] - k - 1] == 1) {
                for (int j = bulbs[i] - k - 1; j < i; j++) {
                    if (ranges[j] == 1) {
                        found = false; 
                        break;
                    } else {
                        found = true; 
                    }
                }
                
                if (found) {
                    return i;
                }
                
            }
            
            if (i + k < bulbs.length && ranges[bulbs[i] - k - 1] == 1) {
                for (int j = bulbs[i] - k - 1; j < i; j++) {
                    if (ranges[j] == 1) {
                        found = false; 
                          break;
                    } else {
                        found = true; 
                    }
                }
                
            }
        }
    }
}

1번 에지 케이스가 너무 많은거 같아서 2번으로 넘어갔는데 한놈만 조질걸...^^
시간만 날렸읍니다

이놈은.. 일단 bulb.lngth와 같은 사이즈의 array를 만들어 준 다음에
지정된 위치에 있는 bulb를 1로 바꿔줍니다
그리고 우리가 찾고있는 k 만큼 떨어진 bulb가 혹시 켜졌는지 알아보고
만약 켜져있다면 그 사이에 있는 숫자들 중 1이 없는지 확인
만약에 끝까지 1이 없다면 성공~~

앞, 뒤로 확인해야 하고 숫자에 -1 빼줘야 하는지 아닌지
위치가 제대로 맞고 있는지 등 확인할 게 많아서 푸는데 한참 걸릴 것 같네요
그래도 개인적으로 1번보다는 덜 귀찮다고 생각합니다..^^
이놈만 조질걸

후회 하고 있어요

0개의 댓글