|
| 1 | +import java.util.Arrays; |
| 2 | +import java.util.HashMap; |
| 3 | +import java.util.HashSet; |
| 4 | +import java.util.Vector; |
| 5 | + |
| 6 | +// 프로그래머스 level3 _ 정확도 PASS, 효율성 FAIL |
| 7 | +class Solution { |
| 8 | + public int[] solution(String[] gems) { |
| 9 | + int[] answer = new int[2]; |
| 10 | + |
| 11 | + HashSet<String> kinds = new HashSet<>(Arrays.asList(gems)); //보석 종류 |
| 12 | + HashMap<String, Integer> resultMap = new HashMap< >(); |
| 13 | + int min = Integer.MAX_VALUE; |
| 14 | + |
| 15 | + for(int i = 0; i<gems.length;i++){ |
| 16 | + if (!resultMap.containsKey(gems[i])) |
| 17 | + resultMap.put(gems[i], i); |
| 18 | + else if(resultMap.containsKey(gems[i])){ |
| 19 | + resultMap.remove(gems[i]); |
| 20 | + resultMap.put(gems[i], i); |
| 21 | + } |
| 22 | + |
| 23 | + // 보석의 모든 종류가 다 들어옴 |
| 24 | + if(resultMap.size() == kinds.size()){ |
| 25 | + Vector<Integer> tmp = new Vector<>(resultMap.values()); |
| 26 | + Object[] tmpArr = tmp.toArray(); |
| 27 | + Arrays.sort(tmpArr); |
| 28 | + |
| 29 | + // 기존의 구간과 현재 구간을 비교, 더 적으면 교체 |
| 30 | + if(min > (int)tmpArr[tmpArr.length-1] - (int)tmpArr[0]) { |
| 31 | + min = (int) tmpArr[tmpArr.length - 1] - (int) tmpArr[0]; |
| 32 | + answer[0] = (int)tmpArr[0]+1; |
| 33 | + if(tmpArr.length == 0) |
| 34 | + answer[1] = (int)tmpArr[0]+1; |
| 35 | + answer[1] = (int)tmpArr[tmpArr.length-1]+1; |
| 36 | + } |
| 37 | + } |
| 38 | + } |
| 39 | + return answer; |
| 40 | + } |
| 41 | +} |
| 42 | + |
0 commit comments