이 문제는 그냥 문자열을 어떻게 끊어서 빠른시간안에 문제를 해결할거냐가 관건이였던 것 같다. 시험때 만나면쉬운데 시간 잡아먹을 것 같은 문제였다.
숫자는 최대 500개이므로 어차피 N^2으로 답을 구해도 충분하다.
그러므로 그냥 잘 끊어읽어서 집합 사이즈별로 구분만 잘하면 된다.
이 과정에서 split과 StringTokenizer의 차이에 대해 알게되었다. 두 글자 이상의 구분자가 필요하다면 split을 쓰자.
그리고, 한글자씩 다양한 종류의 구분자가 필요하다면 StringTokenizer를 쓰면 좋다.
이 외에도 StringTokenizer의 hasMoreNext() 이름 헷갈리지말자.
그리고 String.substring(s, e)인데 substring이거 카멜케이스 아니다... 자꾸 실수했다.
import java.io.*;
import java.util.*;
class Solution {
public int[] solution(String s) {
int[] answer = {};
String[] strs = s.split("},");
if (strs.length == 1) {
ArrayList<Integer> arr = new ArrayList();
String tmpS = s.substring(2, s.length());
StringTokenizer st = new StringTokenizer(tmpS.substring(0, tmpS.length()-2), ",");
while(st.hasMoreTokens()) {
int tmpInt = Integer.parseInt(st.nextToken());
System.out.println(tmpInt);
arr.add(tmpInt);
}
int[] tmpArr = new int[arr.size()];
for(int i=0; i<arr.size(); i++) {
tmpArr[i] = arr.get(i);
}
return tmpArr;
}
ArrayList<Integer>[] arrs = new ArrayList[501];
int N=0;
for(int i=0; i<strs.length; i++) {
if(i==0) {
ArrayList<Integer> arr = new ArrayList();
StringTokenizer st = new StringTokenizer(strs[i].substring(2, strs[i].length()), ",");
while(st.hasMoreTokens()) {
arr.add(Integer.parseInt(st.nextToken()));
}
arrs[arr.size()] = arr;
N = Math.max(N, arr.size());
} else if (i==strs.length-1) {
ArrayList<Integer> arr = new ArrayList();
String tmpS = strs[i].substring(1, strs[i].length());
StringTokenizer st = new StringTokenizer(tmpS.substring(0, tmpS.length()-2), ",");
while(st.hasMoreTokens()) {
arr.add(Integer.parseInt(st.nextToken()));
}
arrs[arr.size()] = arr;
N = Math.max(N, arr.size());
} else {
ArrayList<Integer> arr = new ArrayList();
String tmpS = strs[i].substring(1, strs[i].length());
StringTokenizer st = new StringTokenizer(tmpS, ",");
while(st.hasMoreTokens()) {
arr.add(Integer.parseInt(st.nextToken()));
}
arrs[arr.size()] = arr;
N = Math.max(N, arr.size());
}
}
boolean[] isVisited = new boolean[10_0001];
answer = new int[N];
for(int i=1; i<=N; i++) {
for(int j=0; j<arrs[i].size(); j++) {
int tmpInt = arrs[i].get(j);
if (!isVisited[tmpInt]) {
isVisited[tmpInt] = true;
answer[i-1] = tmpInt;
break;
}
}
}
return answer;
}
}