자바/프로그래머스

[Programmers/JAVA] 튜플

2가 2023. 2. 13. 18:56

 

내 코드

import java.util.*;

class Solution {
    public int[] solution(String s) {
        //s를 요소들만 빼서 리스트로 만들기
        String[] s_split=s.split("},");
        for(int i=0; i<s_split.length; i++) {
            s_split[i]=s_split[i].replaceAll("[\\{\\},]", "");
        }

        int[] answer = new int[s_split.length];

        //리스트를 길이별로 정렬하기
        Arrays.sort(s_split, Comparator.comparing(String::length));

        //answer에 차례차례 값 추가하기
        for(int i=0; i<s_split.length; i++) {
            if(i>0) {//i가 0이 아니면 s_split[i]에서 이전의 값들을 제거해주기 
                for(int j=0; j<i;j++) {
                    s_split[i]=s_split[i].replace(s_split[j], "");
                }
            }
            answer[i]=Integer.parseInt(s_split[i]);
        }
        
        
        return answer;
    }
}

런타임 에러가 난 내 코드

 

import java.util.*;

class Solution {
    public int[] solution(String s) {
        Set<String> set = new HashSet<>();
        
        //{}별로 구분지어주고 {} 삭제하고 구분한것대로 split
        String[] s_new=s.replaceAll("\\},", "/").replaceAll("[{}]", "").split("/");

        int[] answer = new int[s_new.length];

        //각각의 string을 길이순으로 정렬
        Arrays.sort(s_new, (a, b)->{return a.length() - b.length();});

        int i=0;
        for(String s1: s_new) {
            //각각의 string을 ,별로 또 나눔.
            for(String s2 : s1.split(",")) {
                if(!set.contains(s2)) {//set에 포함되어 있지 않으면
                    set.add(s2);
                    answer[i]=Integer.parseInt(s2);
                    i++;
                }
            }
        }
        
        
        return answer;
    }
}

남들이 푼 코드를 보고 열심히 생각해서 푼 코드

 

 

느낀점

 

내가 지금까지 푼 알고리즘 문제중에서 제일 어려웠다. hashset을 처음 써보기도 했고 람다식 sort도 처음이다.

근데 그게 문제가 아니라 그냥 너무 어려웠다. 내가 열심히 만든 처음 식은 런타임에러나고.. 그 다음에 열심히 생각했는데 도저히 모르겠고.. 5시간정도 붙들려있었던 듯 하다..

hashset에 대해서도 배우게 되고 람다식 sort도 배우게 돼서 보람은 있다. comparator의 compare을 사용하는건데 람다식 따로, comparator의 compare 따로 놓고 보면 둘 다 이해가 간다. 근데 위 코딩에서 사용한 저 식이 전혀 이해가 안간다. 저건 설명해주는 사람도 없고.. ㅜㅜ 매개변수에 들어가는 숫자가 어떤건지, 왜 그렇게 대입되는지도 모르겠고 계속 반복돼서 값이 나오는거던데 왜 반복하는지 어떻게 반복하는지... 어떻게 비교하는건지.. 모르겠다 ㅜㅜ

comparator의 compare를 더 공부해야하는건가??