728x90
코드 힌트
문제 이해:
- 주어진 문자열 s는 여러 집합들이 포함된 문자열이며, 이 집합들은 중복된 요소를 가질 수 있습니다. 이 문제의 목표는 집합들에서 요소를 추출하여 특정 순서로 배열을 구성하는 것입니다.
- 집합들은 {}로 감싸져 있으며, 이를 파싱하고 각 집합의 길이를 기준으로 정렬한 후 요소들을 추출해야 합니다.
세부 설명:
- 먼저, 문자열 s를 파싱하여 집합들의 배열로 변환해야 합니다. 이를 위해 불필요한 문자를 제거하고, 문자열을 구분자로 분할합니다.
- 집합들의 배열을 길이순으로 정렬합니다. 이렇게 하면, 작은 집합부터 순차적으로 큰 집합의 요소를 추출할 수 있습니다.
- Set 자료구조를 사용하여 이미 추가된 요소를 추적하며, 중복되지 않은 요소만 결과 배열에 추가합니다.
알고리즘:
- 문자열에서 처음과 끝의 불필요한 {{와 }}를 제거하고, 각 집합을 구분하는 },{를 기준으로 문자열을 나눕니다.
- 나눈 문자열 배열을 길이 순서대로 정렬합니다. 이렇게 하면 각 집합의 길이 순으로 요소를 처리할 수 있습니다.
- 정렬된 각 집합에서 요소를 추출하고, Set을 사용하여 중복되지 않은 새로운 요소만 결과 배열에 추가합니다.
- 최종적으로 요소들이 저장된 배열을 반환합니다.
정답은 더보기 클릭
더보기
import java.util.*;
class Solution {
public int[] solution(String s) {
// 중복을 피하기 위해 Set 사용
Set<String> set = new HashSet<>();
// 입력 문자열에서 불필요한 부분을 제거하고, 각 집합을 배열로 분리
String[] arr = s.substring(2, s.length() - 2).split("\\},\\{");
// 결과를 저장할 배열 초기화
int[] result = new int[arr.length];
// 각 집합을 길이 순서대로 정렬
Arrays.sort(arr, (o1, o2) -> o1.length() - o2.length());
int index = 0;
// 정렬된 집합들에서 요소 추출
for (String str1 : arr) {
// 각 집합에서 요소를 쉼표로 구분하여 분리
for (String str2 : str1.split(",")) {
// 새로운 요소일 때만 결과 배열에 추가
if (set.add(str2))
result[index++] = Integer.parseInt(str2);
}
}
// 최종 배열 반환
return result;
}
}
728x90
'프로그래머스(Java) > Level 2' 카테고리의 다른 글
[프로그래머스] [1차] 뉴스 클러스터링 (0) | 2024.08.15 |
---|---|
[프로그래머스] 피로도 (0) | 2024.08.14 |
[프로그래머스] [1차] 캐시 (0) | 2024.08.14 |
[프로그래머스] 행렬의 곱셈 (0) | 2024.08.12 |
[프로그래머스] n^2 배열 자르기 (0) | 2024.08.12 |