문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/64065
제한 사항
입출력 예
풀이
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.stream.Collectors;
class Solution {
public int[] solution(String s) {
ArrayList<Integer> answer = new ArrayList<>();
ArrayList<HashSet<Integer>> result = new ArrayList<>();
Pattern pattern = Pattern.compile("(\\d,*)+");
Matcher matcher = pattern.matcher(s);
while(matcher.find()) {
String[] strNum = matcher.group().split("\\,");
HashSet<Integer> currentSet = new HashSet<>();
result.add(currentSet);
for (int i = 0; i < strNum.length; i++)
currentSet.add(Integer.parseInt(strNum[i]));
}
result = result.stream()
.sorted((l1, l2) -> l1.size() - l2.size())
.collect(Collectors.toCollection(ArrayList::new));
for (int i = 0; i < result.size(); i++)
for (int j : result.get(i))
if (!answer.contains(j)) answer.add(j);
return answer.stream().mapToInt(i -> i).toArray();
}
}
후기
정규표현식 작성을 이상하게 해서 조금 헤맸다. 이 문제의 관건은 어떻게 집합을 나눌 것인지와 나눈 후에는 어떻게 중복을 없애면서 값을 추가할 것인가이다. 이것만 해결하면 충분히 풀 수 있다.
'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
[프로그래머스][JAVA][Lv. 2] 기능 개발 (0) | 2023.09.08 |
---|---|
[프로그래머스][JAVA][Lv. 2] 괄호 회전하기 (0) | 2023.09.07 |
[프로그래머스][JAVA][Lv. 0] 다음에 올 숫자 (0) | 2023.09.05 |
[프로그래머스][JAVA][Lv. 2] 캐시 (0) | 2023.09.05 |
[프로그래머스][JAVA][Lv. 2] 할인 행사 (0) | 2023.09.04 |