문제 설명
입출력 예시
요약
해당 문자열을 통해 튜플 구하기
* 여기서 튜플은 정해진 순서가 있고 중복되는 숫자가 없음
풀이
접근 방식
1. 문자열에서 서로 크기가 다른 집합을 떼서 배열에 담는다.
→ {{20, 111}, {111}} : {20, 111}과 {111}로 split
2. 해당 집합을 요소로 갖는 배열을 문자열의 길이 순으로 정렬한다.
→ Arrays.sort()에 람다식을 통한 정렬
3. set에 하나씩 담는다.
→ 두 번째 요소부터는 "," 기준으로 split후 하나씩 담기
코드리뷰
import java.util.*;
class Solution {
public int[] solution(String s) {
HashSet<Integer> set = new LinkedHashSet<>();
List<Integer> answerList = new ArrayList<>();
s = s.replaceAll("[{]", "");
s = s.replace("}}", "");
String[] arr1 = s.split("},"); // arr1 = {"2", "2, 1", "2, 1, 3", ...} 과 같이 담김
Arrays.sort(arr1, (String s1, String s2) -> s1.length() - s2.length()); // 람다식을 통해 length() 순으로 정렬
for(int i = 0; i < arr1.length; i++) {
if(i == 0) {
set.add(Integer.valueOf(arr1[i])); // 첫 번째 요소는 split할 게 없음
} else {
String[] arr2 = arr1[i].split(","); // 두 번째 부터 split(",")
for(String str : arr2) {
set.add(Integer.valueOf(str)); // 하나씩 순서대로 set에 담기
}
}
}
for(int i : set) {
answerList.add(i); // LinkedHashSet에 순서대로 담겨있는 배열을 list에 옮김
}
int[] answer = new int[set.size()];
for(int i = 0; i < answer.length; i++) {
answer[i] = answerList.get(i);
}
return answer;
}
}
'알고리즘 > PROGRAMMERS' 카테고리의 다른 글
캐시(Lv.2) (0) | 2024.03.22 |
---|---|
기능개발(Lv.2) (1) | 2024.03.22 |
피로도(Lv.2) (0) | 2024.03.22 |
프로세스(Lv.2) (0) | 2024.03.22 |
전화번호 목록(Lv.2) (0) | 2024.03.22 |