[프로그래머스] 튜플

2020. 4. 12. 18:33프로그래머스/카카오

import java.util.*;

class Solution {
    public int[] solution(String s) {
        int[] answer = {};
        s = s.substring(2);
        String[] tup = s.split("}");
        List<String> list = new ArrayList<>();
        List<Integer> answerList = new ArrayList<>();
     
        for(int i=0; i<tup.length; i++){
            String addList="";
            for(int j=0; j<tup[i].length(); j++){
                if(Character.isDigit(tup[i].charAt(j))){
                   addList = tup[i].substring(j);
                    break;
                }
            }
           list.add(addList);
        }
        
        Collections.sort(list,new Comparator<String>(){
           public int compare(String s1, String s2){
               int num1 =1;
               int num2 =1;
               
               for(int i=0; i<s1.length(); i++){
                   if(s1.charAt(i)==','){
                       num1++;
                   }
               }
               
               for(int i=0; i<s2.length(); i++){
                   if(s2.charAt(i)==','){
                       num2++;
                   }
               }
               return num1-num2;
           } 
        });
    
        
        for(int i=0; i<list.size(); i++){
            String[] sp = list.get(i).split(",");
            for(int j=0; j<sp.length; j++){
                if(!answerList.contains(Integer.parseInt(sp[j]))){
                    answerList.add(Integer.parseInt(sp[j]));
                }
            }
        }
        
        answer = new int[answerList.size()];
        
        for(int i=0; i<answer.length; i++){
            answer[i] = answerList.get(i);
        }
        
        return answer;
    }
}

주어진 문자열을 튜플별로 나누고, 사이즈별로 정렬하고, 숫자로 바꾸어 저장한다음 중복을 피해서 추가하였다.

더 간단하게 나누는 방법을 생각해 봐야겠다.

 

import java.util.*;

class Solution {
    public int[] solution(String s) {
        int[] answer = {};
        String[] extract = s.split("},");
        List<Integer> answerNumber = new ArrayList<>();
        
        for(int i=0; i<extract.length; i++){
            extract[i] = extract[i].replace("{","");
            extract[i] = extract[i].replace("}","");
        }
        
        Arrays.sort(extract, new Comparator<String>(){
           public int compare(String s1, String s2){
               return s1.length()-s2.length();
           } 
        });
        
        for (int i=0; i<extract.length; i++) {
            String[] extractNumber = extract[i].split(",");
            for(int j=0; j<extractNumber.length; j++){
                if (!answerNumber.contains(Integer.parseInt(extractNumber[j]))) {
                    answerNumber.add(Integer.parseInt(extractNumber[j]));
                }
            }
        }
        answer = new int[answerNumber.size()];
        for(int i=0; i<answer.length; i++){
            answer[i] = answerNumber.get(i);
        }
                                     
        return answer;
    }
}

두번째 풀이때는 replace를 통해 더욱 간단하게 숫자들로 분류 할 수 있었다.

정렬시에 기준을 ","를 포함한 문자열의 길이로 하였는데 통과가 된것은 개수가 적은 튜플을 개수가 많은 튜플이 포함한다는 특징 때문에 가능하였다.