소개

이 문제는 2019 카카오 개발자 겨울 인턴십으로 출제되었던 문제이다. 

해당 문제에 대한 아이디어는 다음과 같다.

로직

1) 연속된 숫자를 추출하여야 한다.

2) 1의 목적을 위해서 자료구조 HashMap을 사용하였다.

3) HashMap의 경우 같은 Key라면 (default :1) +1 씩 더해주었다.

4) 결과적으로 Value (HashMap의 Key에 따른 Value) 로 내림차순하여 순서대로 Key값을 출력해 주었다.

구체화 해보면 다음과 같다.

이를 그림으로 도식화 하면 다음과 같다.

소스코드

 

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
import java.util.*;
class Solution {
    public int[] solution(String s) {
        int[] answer = {};
        ArrayList<int[]> al = new ArrayList<>();
        char[] chaS = s.toCharArray();
        HashMap<Integer, Integer> hm = new HashMap<>();
      
        String str = "";
        for(int i=0; i<chaS.length; i++){
            
            if(Character.isDigit(chaS[i])){
                str+=chaS[i];
                
            }else{
                if(str.equals("")) continue;
             
                if(hm.containsKey(Integer.parseInt(str))){
                    hm.put(Integer.parseInt(str), hm.get(Integer.parseInt(str))+1);
                    str="";
                    continue;
                }else{
                    hm.put(Integer.parseInt(str), 1);
                    str="";
                }
            }
        }
        answer = new int[al.size()];
        for(int key : hm.keySet())
            al.add(new int[]{key, hm.get(key)});
        
        Collections.sort(al, new Comparator<int[]>(){
            
            @Override
            public int compare(int[] o1, int[] o2){
                return o2[1]-o1[1];
            }
        });
           
       
        answer = new int[al.size()];
        for(int i=0; i<al.size(); i++){
            answer[i] = al.get(i)[0];
        }
       
        return answer;
    }
}
cs