1. 괄호안의 숫자들을 뽑는다.
[[4,2,3],[3],[2,3,4,1],[2,3]]
[4, 2, 3]
[3]
[2, 3, 4, 1]
[2, 3]
2. 뽑은 숫자들을 길이 순서대로 정렬한다.
[3]
[2, 3]
[4, 2, 3]
[2, 3 4, 1]
3. 첫번째 배열의 숫자를 뽑고(3), 두번째 배열에서는 안뽑힌 숫자(2)를 뽑고, 세번째 배열에서도 안뽑힌 숫자(4)를 뽑고.. 반복
package org.programmers;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
public class kakao_64065 {
public int[] solution(String s) {
List<tuple> tuples = new ArrayList<>();
String s2 = s.substring(1, s.length() - 1); // 앞뒤 괄호 제거
StringBuilder st = new StringBuilder();
List<Integer> list = null;
boolean is_set = false; // ) 괄호로 닫히지 않았을때만 숫자추가.
for (int i = 0; i < s2.length(); i++) {
if (s2.charAt(i) == '(') {
list = new ArrayList<>();
is_set = false;
} else if (s2.charAt(i) == ')') {
list.add(Integer.parseInt(new String(st)));
st = new StringBuilder();
tuples.add(new tuple(list.size(), list));
is_set = true;
} else if (s2.charAt(i) == ',' && is_set == false) {
list.add(Integer.parseInt(new String(st)));
st = new StringBuilder();
} else if (s2.charAt(i) != ',' && is_set == false) {
st.append(s2.charAt(i));
}
}
Collections.sort(tuples);
Iterator it = tuples.iterator();
int idx = 0;
int[] answer = new int[tuples.get(tuples.size() - 1).len];
HashSet<Integer> hs = new HashSet<>();
while (it.hasNext()) {
tuple t = (tuple) it.next();
List<Integer> integers = t.list;
for(Integer i:integers) {
if(!hs.contains(i)) {
hs.add(i);
answer[idx] = i;
idx++;
break;
}
}
}
for (Integer a : answer)
System.out.println(a);
return answer;
}
}
class tuple implements Comparable<tuple> {
int len;
List<Integer> list;
tuple(int len, List<Integer> list) {
this.len = len;
this.list = list;
}
@Override
public int compareTo(tuple arg0) {
return this.len - arg0.len;
}
}
package org.programmers;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;
public class kakao_64065_2 {
public int[] solution(String s) {
int[] answer;
ArrayList<String> sList = new ArrayList<>();
ArrayList<String> answerList = new ArrayList<>();
StringTokenizer divS = new StringTokenizer(s, "()");
// {}로 나눈다.
while (divS.hasMoreElements()) {
String tempString = divS.nextToken();
System.out.println("tempString ="+tempString);
// 4,2,3
// ,
// 3
// , 이런식으로 값이 분리된다.
if (!tempString.equals(","))
sList.add(tempString);
}
// 길이 순서대로 정렬.
Collections.sort(sList, (o1, o2) -> {
return Integer.compare(o1.length(), o2.length());
});
// 맨앞에 값 추가
answerList.add(sList.get(0));
// 그 뒤부터 입력 안된 값 추가
for (int i = 1; i < sList.size(); i++) {
String[] tempChar = sList.get(i).split(",");
for (int j = 0; j < tempChar.length; j++) {
// asnwerList에 없는 값만 추가한다.
if (!answerList.contains(tempChar[j]))
answerList.add(tempChar[j]);
}
}
return answerList.stream().mapToInt(Integer::parseInt).toArray();
}
}