잡다한 배똥월드

728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? X
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - 보석 쇼핑

["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7]

programmers.co.kr

 

 

 

 

 

import java.util.*;
class Solution {
    public int[] solution(String[] gems) {
        int[] answer = new int[2]; //리턴할 배열 {시작위치, 끝위치}
        
        //보석 개수와 각 보석의 배열 위치를 지정하기 위해 Map 활용
        HashMap<String, Integer> names = new HashMap<>(); 
        
        //만약 names에 해당 보석에 대한 지정된 위치가 없다면 새로 추가하기
        for (int i = 0; i < gems.length; i++) {
            if (names.getOrDefault(gems[i], 0) == 0) {
                names.put(gems[i], names.size() + 1);
            }
        }
  
        int size = names.size();
        
        //배열 위치 파악하기 위해서
        int[] list = new int[size+1];
        
        //구간 파악을 위해서
        int count = Integer.MAX_VALUE;
        
        for (int i = 0; i < gems.length; i++) {
        	//보석 위치에 대한 배열은 i+1로 수정하기
            list[names.get(gems[i])] = i+1;
            
            boolean value = true;
            //모두 보석이 등장했는지를 파악하기 위한 for문
            for (int j = 1; j <= size; j++) {
                if (list[j] == 0) {
                    value = false;
                    break;
                }
            }
            
            int min = Integer.MAX_VALUE;
            int max = 0;
            
            //모든 보석이 등장했다면 시작 위치와 끝 위치 파악하고,
            //만약 구간 길이가 저장된 count 보다 짧다면 answer 리셋
            if (value) {
                for (int j = 1; j <= size; j++) {
                    min = Math.min(list[j], min);
                    max = Math.max(list[j], max);
                }
                
                if (max - min < count) {
                    answer[0] = min;
                    answer[1] = max;
                    count = max-min;
                }
            }
        }
        
        return answer;
    }
}

 

정확성 테스트
테스트 1 통과 (0.06ms, 69.2MB)
테스트 2 통과 (0.13ms, 76.1MB)
테스트 3 통과 (0.39ms, 78.7MB)
테스트 4 통과 (2.42ms, 77.6MB)
테스트 5 통과 (0.31ms, 76.1MB)
테스트 6 통과 (0.04ms, 75.2MB)
테스트 7 통과 (0.05ms, 72.2MB)
테스트 8 통과 (2.89ms, 82.9MB)
테스트 9 통과 (3.20ms, 77.8MB)
테스트 10 통과 (3.44ms, 78.4MB)
테스트 11 통과 (5.25ms, 75.3MB)
테스트 12 통과 (3.90ms, 77.4MB)
테스트 13 통과 (6.72ms, 74.6MB)
테스트 14 통과 (16.34ms, 79.2MB)
테스트 15 통과 (7.12ms, 86.9MB)
 
효율성 테스트
테스트 1 통과 (23.14ms, 54.2MB)
테스트 2 통과 (61.27ms, 56.1MB)
테스트 3 통과 (28.08ms, 57.2MB)
테스트 4 통과 (99.63ms, 61.6MB)
테스트 5 통과 (57.07ms, 61.7MB)
테스트 6 통과 (61.71ms, 65.6MB)
테스트 7 통과 (89.76ms, 67.1MB)
테스트 8 통과 (74.50ms, 66.2MB)
테스트 9 통과 (43.17ms, 69.9MB)
테스트 10 통과 (78.63ms, 75.4MB)
테스트 11 통과 (197.14ms, 79.5MB)
테스트 12 통과 (483.12ms, 80MB)
테스트 13 통과 (609.06ms, 79MB)
테스트 14 통과 (170.16ms, 79.5MB)
테스트 15 통과 (377.50ms, 80.1MB)

 

 

 

 

 

 

728x90

+ Recent posts