알고리즘 풀이/프로그래머스

[프로그래머스][JAVA] 튜플 (문자열, Set)

배게 2022. 3. 24. 02:36
728x90

처음에는 Map으로 했는데 (Line:24의 중복된 원소를 Map.getOrDefault(..)로 했음)

Set.add( )의 리턴값이 boolean형이라는 것을 다른 분 코드보고 알게 됐다

Map -> Set으로 바꾸니까 깔끔하기는한데

Map의 속도는 O(1)인데

Set.add()하면서 중복인지 아닌지 판별하는 속도가 O(1)보다는 클 것이라고 생각한다

둘다 HashFuncion을 사용하는 자료구조였음.. Set의 탐색은 O(1)/저장 O(1)

 

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
import java.util.*;
 
class Solution {
    public int[] solution(String s) {
        // System.out.println(s);
        
        List<String> list = new ArrayList<>();
        // Map<Integer, Boolean> map = new HashMap<>();
        Set<Integer> set = new HashSet<>();
        
        String[] split = s.split("}");
        for(int i=0; i<split.length; i++){
            // System.out.println(split[i]);
            list.add(split[i].substring(2split[i].length()));
        }
        Collections.sort(list, (s1, s2) -> s1.length()-s2.length());
        // list.forEach(System.out::println);
        int[] answer = new int[list.size()];
        
        for(int i=0; i<list.size(); i++){
            split = list.get(i).split(",");
            for(int j=0; j<split.length; j++){
                int currNum = Integer.parseInt(split[j]);
                if(set.add(currNum)){
                    answer[i] = currNum;
                }
            }
        }
        
        return answer;
    }
}
cs