https://school.programmers.co.kr/learn/courses/30/lessons/64065
문제 자체는 집합의 구성 개수가 작은것 부터 정렬을 하고 중복을 체크하며 결과를 출력하면 끝이었다
그런데 입력이 문자열로 되어있어서 그것을 가지고 해결하는것이 힘들었다
코드를 작성하다보니 길게 작성되었는데, 입력 s의 2번째 인덱스 부터 //},{을 가지고 split을 하면 숫자만 자를 수 있기 때문에 전혀 이럴 필요가 없었다...
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashSet;
class Solution {
public int[] solution(String s) {
int[] answer = {};
String str = s.substring(1, s.length()-1);
ArrayList<String> al = new ArrayList<>();
ArrayList<Integer> al2 = new ArrayList<>();
ArrayList<ArrayList<Integer>> al3 = new ArrayList<>();
StringBuilder sb = new StringBuilder();
boolean bl = false;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '}') {
bl = false;
al.add(sb.toString());
sb = new StringBuilder();
al.add("#");
continue;
} else if (str.charAt(i) == '{') {
bl = true;
continue;
}
if (bl && str.charAt(i) >= '0' && str.charAt(i) <= '9') {
sb.append(str.charAt(i));
}
if (bl && str.charAt(i) == ',') {
al.add(sb.toString());
sb = new StringBuilder();
}
}
str = al.toString();
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) >= '0' && str.charAt(i) <= '9') {
sb.append(str.charAt(i));
}
if (str.charAt(i) == ',' && !sb.toString().equals("")) {
al2.add(Integer.valueOf(sb.toString()));
sb = new StringBuilder();
}
if (str.charAt(i) == '#') {
al3.add(al2);
al2 = new ArrayList<>();
}
}
Comparator<ArrayList<Integer>> comparator = new Comparator<ArrayList<Integer>>() {
@Override
public int compare(ArrayList<Integer> o1, ArrayList<Integer> o2) {
return Integer.compare(o1.size(), o2.size());
}
};
al3.sort(comparator);
HashSet<Integer> hashSet = new HashSet<>();
ArrayList<Integer> al4 = new ArrayList<>();
for (int i = 0; i < al3.size(); i++) {
for (int j = 0; j < al3.get(i).size(); j++) {
if (!hashSet.contains(al3.get(i).get(j))) {
hashSet.add(al3.get(i).get(j));
al4.add(al3.get(i).get(j));
}
}
}
answer = new int[al4.size()];
for (int i = 0; i < answer.length; i++) {
answer[i] = al4.get(i);
}
return answer;
}
}
'Programmers' 카테고리의 다른 글
[프로그래머스][JAVA]Lv. 2 - 이진 변환 반복하기 (1) | 2023.09.25 |
---|---|
[프로그래머스][JAVA]Lv. 2 - 쿼드압축 후 개수 세기 (0) | 2023.09.25 |
[프로그래머스][JAVA]Lv. 2 - 멀쩡한 사각형 (0) | 2023.09.25 |
[프로그래머스][JAVA]Lv. 2 - 괄호 변환 (0) | 2023.09.25 |
[프로그래머스][JAVA]Lv. 3 - 정수 삼각형 (0) | 2023.07.31 |