문제 링크 : 튜플




처음 풀이
public ArrayList<Integer> solution(String s) {
ArrayList<Integer> answer = new ArrayList<>();
s = s.substring(2,s.length());
s = s.substring(0,s.length() - 2);
s = s.replace("},{", "/");
String[] strs = s.split("/");
Arrays.sort(strs, (String s1, String s2) -> s1.length() - s2.length());
for(String str: strs){
String[] temp = str.split(",");
for(int i = 0; i < temp.length; i++){
int num = Integer.parseInt(temp[i]);
if(!answer.contains(num)){
answer.add(num);
}
}
}
return answer;
}
기존에 반환형인 int[]형을 ArrayList로 바꿔서 푼 풀이다.
tuple의 길이가 동적으로 바뀌어서 그것을 어떻게 담아낼까 고민하다가 일단은 ArrayList로 풀었다.
앞뒤의 {{와 }}을 모두 잘라내고, 집합의 구분을 },{에서 /로 변경한다.
그 후 /를 기준으로 잘라서 집합을 담고있는 문자열을 생성한 후, 길이순으로 정렬한다.
그 후에 순차적으로 튜플을 담을 ArrayList에 삽입 후 반환한다.
두번째 풀이(실패)
public int[] solution(String s) {
String[] ary = s.replaceAll("\\{", " ").replaceAll("\\}", " ").trim().split(" , ");
Arrays.sort(ary, (String s1, String s2) -> s1.length() - s2.length());
String[] answerAry = ary[ary.length - 1].split(",");
int[] answer = new int[answerAry.length];
int index = 0;
for(String str: answerAry){
answer[index++] = Integer.parseInt(str);
}
return answer;
}
이 풀이부터 int[] 자료형으로 반환하기 위해서 노력을 했다.
문자열을 분리시키는 것은 다른 사람들의 풀이를 봤을 때 좋은 방법이 있어서 저것을 따랐다. 먼저 {와 }를 모두 공백 한칸으로 제거한 후, trim을 통해 앞, 뒤 공백을 제거한다. 그 다음 원래 "},{" 이 문자열이었을 것이 교체되어 " , " 된 것을 기준으로 split해서 집합을 구분지어 문자열 배열에 담는다.
그 후 배열의 길이순으로 정렬한다.
여기서 하나 실수했던 것이, 튜플의 배치가 다르면 다른 튜플이 된다는것을 까먹고 문제풀이를 진행해 가장 길이가 긴 것만을 검사해서 기대했던 기댓값과 다르게 나와 계속 문제가 틀렸다.
집합의 길이가 작은 것부터 진행해야 기댓값과 같은 튜플을 만들 수 있다는 것을 착안한 후 다시 풀이한 것이 다음의 풀이이다.
마지막 풀이
public int[] solution(String s) {
Set<String> set = new HashSet<>();
String[] ary = s.replaceAll("\\{", " ").replaceAll("\\}", " ").trim().split(" , ");
Arrays.sort(ary, (String s1, String s2) -> s1.length() - s2.length());
int[] answer = new int[ary.length];
int index = 0;
for(String str: ary){
for(String str2: str.split(",")){
if(set.add(str2)){
answer[index++] = Integer.parseInt(str2);
}
}
}
return answer;
}