자바/프로그래머스
[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를 더 공부해야하는건가??