

내가 작성한 코드
import java.util.*;
import java.util.regex.*;
class Solution {
public int[] solution(String s) {
// 정규 표현식을 이용하여 숫자 그룹 추출
List<Set<Integer>> sets = new ArrayList<>();
Matcher matcher = Pattern.compile("\\{([\\d,]+)\\}").matcher(s); // 중괄호 사이의 숫자 그룹을 찾기 위한 정규 표현식
// 정규 표현식에 매칭되는 부분을 찾고, 각 그룹을 Set으로 변환하여 리스트에 추가
while (matcher.find()) {
Set<Integer> set = new HashSet<>();
for (String num : matcher.group(1).split(",")) {
set.add(Integer.parseInt(num));
}
sets.add(set);
}
// 집합을 크기 순으로 정렬
sets.sort(Comparator.comparingInt(Set::size));
List<Integer> result = new ArrayList<>(); // 결과를 저장할 리스트
Set<Integer> seen = new HashSet<>(); // 이미 본 숫자를 저장할 셋셋
// 튜플 순서 찾기
for (Set<Integer> set : sets) {
for (int num : set) {
if (!seen.contains(num)) {
result.add(num);
seen.add(num);
break;
}
}
}
// 리스트를 배열로 변환하여 반환
return result.stream().mapToInt(Integer::intValue).toArray();
}
}
다른 사람의 코드
import java.util.*;
class Solution {
public int[] solution(String s) {
Set<String> set = new HashSet<>(); // 중복 제거를 위한 Set
// 문자열에서 중괄호 제거 및 분리
String[] arr = s.replaceAll("[{]", " ").replaceAll("[}]", " ").trim().split(" , ");
// 각 문자열 길이 오름 차순 정렬
// Arrays.sort(arr, Comparator.comparingInt(String::length));
Arrays.sort(arr, (a, b) -> {
return a.length() - b.length();
});
int[] answer = new int[arr.length];
int idx = 0;
for (String s1 : arr) {
for (String s2 : s1.split(",")) {
if (set.add(s2)) // 중복된 숫자는 추가하지 않음
answer[idx++] = Integer.parseInt(s2); // 문자열을 정수로 변환하여 배열에 저장
}
}
return answer;
}
}
Share article