💡Problem Solving/Programmers

[프로그래머스] 튜플 (Java)

gom20 2021. 10. 20. 18:16

#문제

https://programmers.co.kr/learn/courses/30/lessons/64065

 

코딩테스트 연습 - 튜플

"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]

programmers.co.kr


#풀이

각 Set의 Element 수로 오름차순 정렬하고 

HashSet을 통해 Element 중복 체크를 하며, 중복되지 않는 Element를 차례대로 넣는다. 

 

#소스코드

import java.util.*;

class Solution {
    public int[] solution(String s) {
        int len = s.length();      
        s = s.substring(2, len-2); // 대 괄호를 지우고
        
        String[] sets = s.split("\\},\\{"); // },{ 문자열로 split
        int n = sets.length;
        ArrayList<Integer> answer = new ArrayList<Integer>();
        HashSet<String> used = new HashSet<String>();
        ArrayList<String[]> list = new ArrayList<String[]>();
    
        for(String set : sets){
            list.add(set.split(",")); // 각 set의 elem을 나눠서 배열로 만든 다음에 list에 넣음.
        }
        
        Collections.sort(list, new Comparator<String[]>(){
            @Override
            public int compare(String[] arr1, String[] arr2){
                return arr1.length - arr2.length;
            }
        }); // elem의 수가 적은 집합부터 오름차순 정렬
        
        for(String[] set : list){
            for(String elem : set){
                if(used.contains(elem)) continue; 
                used.add(elem);
                answer.add(Integer.parseInt(elem));
            }
        }
   
        return answer.stream().mapToInt(x->x).toArray();
    }
}