Java
프로그래머스: 튜플
Daeryuk Kim
2024. 3. 7. 15:14
import java.util.*;
class Solution {
public int[] solution(String s) {
// {"와 "}"를 제거
// 2},{2,1},{2,1,3},{2,1,3,4
// 각 집합을 구분하는 "},{"를 "-"로 대체하여 문자열을 파싱합니다.
// 2-2,1-2,1,3-2,1,3,4
s = s.substring(2, s.length()-2).replace("},{", "-");
// 2
// 2,1
// 2,1,3
// 2,1,3,4
String[] arr = s.split("-");
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.length() - o2.length();
}
});
List<Integer> list = new ArrayList<>();
for(String str : arr) {
// 문자열을 ","를 기준으로 분리하여 문자열 배열 splitStr을 생성.
String[] splitStr = str.split(",");
for(String ss : splitStr) {
// 문자열 ss를 정수 num으로 변환합니다.
int num = Integer.parseInt(ss);
// 만약 리스트에 num이 없다면, num을 리스트에 추가.
if(!list.contains(num)) {
list.add(num);
}
}
}
// 리스트를 스트림으로 변환하고,
// 각 원소를 int로 매핑한 다음,
// 이를 배열로 변환하여 반환합니다.
return list.stream().mapToInt(i -> i).toArray();
}
public static void main(String[] args) {
String s = "{{2},{2,1},{2,1,3},{2,1,3,4}}";
Solution sol = new Solution();
int[] result = sol.solution(s);
System.out.println(Arrays.toString(result));
}
}
아래 풀이는 거의 감탄을 금치 못한다....ㅠㅠ
import java.util.*;
class Solution {
public int[] solution(String s) {
Set<String> set = new HashSet<>();
// 문자열 s에서 '{'와 '}'를 공백으로 대체합니다. 그리고 앞뒤의 공백을 제거한 후,
// ' , '를 기준으로 문자열을 분리하여 배열 arr을 생성합니다.
String[] arr = s.replaceAll("[{]", " ").replaceAll("[}]", " ").trim().split(" , ");
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(",")) {
// 원소를 set에 추가하고, 만약 새로운 원소가 추가되었다면
// 이를 결과 배열 answer에 추가합니다.
// 이때, set은 중복된 원소를 포함하지 않으므로, 새로운 원소만 추가됩니다.
if(set.add(s2)) answer[idx++] = Integer.parseInt(s2);
}
}
return answer;
}
public static void main(String[] args) {
String s = "{{2},{2,1},{2,1,3},{2,1,3,4}}";
Solution sol = new Solution();
int[] result = sol.solution(s);
System.out.println(Arrays.toString(result));
}
}