ALGORITHM

[JAVA] 프로그래머스 - 튜플

연듀 2023. 3. 4. 08:03

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

/*
작은 길이의 부분집합일 수록 먼저 먼저 온 것임
1. 부분집합에 길이에 따라서 정렬(길이 증가하는 순으로)
    1-1. string -> int형 arr로 
2. 그 후 차례대로 순회하면서 set만들어 원소 넣음 
3. set을 입력한대로(linkedHashSet) 쭉 출력하면 됨
*/
import java.util.*; 

class Solution {
    public int[] solution(String s) {
        s = s.substring(1, s.length()-1); // 앞뒤 제거
        List<String> list = new ArrayList<>(); 
        
        String each = ""; 
        boolean flag = false;
        for(char c : s.toCharArray()){
            if(c == '{') flag = true;
             else if(c == '}'){
                flag = false;
                list.add(each);
                each=""; 
            }
            else{
                if(flag) each+=c; 
            }
        }

        Collections.sort(list, (String a, String b) -> a.length() - b.length()); // 1 
        
        Set<Integer> set = new LinkedHashSet<>();
        
        for(String l : list){
            for(String num : l.split(",")){
                set.add(Integer.parseInt(num)); // 2
            }
        }
        int[] answer = new int[set.size()]; 
        int i=0; 
        for(int x : set){ // 3
            answer[i++] = x;    
        }
        return answer;
    }
}