## 접근
1. 주어진 문자열을 {{a1}, {a1, a2}, {a1, a2, a3}, {a1, a2, a3, a4}, ... {a1, a2, a3, a4, ..., an}}의 형태로 변환해야 한다. 이 집합들을 담고 있는 자료구조는 집합의 길이를 기준으로 정렬되어야 한다.
* an을 구하기 위해서는, a1 ~ an-1을 알고 있어야 한다. 그래서, 집합의 길이를 기준으로 정렬하면서 a1부터 순차적으로 찾는다.
2. 정렬된 자료구조를 이용해, an을 구한다. {an, an - 1, a1, a2, ...} 식으로 순서가 섞여있더라도, 이미 an-1까지 알고 있으므로 an를 선택할 수 있다 an-1까지를 Set 자료구조를 이용해서 저장한다.
## 유의사항
1. 주어진 문자열들을 집합으로 변환하고, 자료구조에 집합들을 저장할 때 깊은 복사가 이루어져야 한다. new를 통해서 해결해준다.
## 해설코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
import java.util.*;
import java.lang.*;
import java.io.*;
class Solution {
public int[] solution(String s) {
int[] answer = {};
s = s.substring(1, s.length() - 1);
ArrayList<ArrayList<Integer>> aList = new ArrayList<>();
ArrayList<Integer> list = new ArrayList<>();
String[] sArr = s.split(",");
for(int i = 0; i < sArr.length; i++){
if(sArr[i].charAt(0) == '{'){
if(sArr[i].charAt(sArr[i].length() - 1) == '}'){
list.add(Integer.valueOf(sArr[i].substring(1, sArr[i].length() - 1)));
aList.add(new ArrayList<Integer>(list));
list.clear();
continue;
}
list.add(Integer.valueOf(sArr[i].substring(1, sArr[i].length())));
}else if(sArr[i].charAt(sArr[i].length() - 1) == '}'){
list.add(Integer.valueOf(sArr[i].substring(0, sArr[i].length() - 1)));
aList.add(new ArrayList<Integer>(list));
list.clear();
}else{
list.add(Integer.valueOf(sArr[i]));
}
}
Collections.sort(aList, new Comparator<ArrayList<Integer>>(){
public int compare(ArrayList<Integer> list1, ArrayList<Integer> list2){
return Integer.compare(list1.size(), list2.size());
}
});
// Make Result
ArrayList<Integer> ansList = new ArrayList<>();
HashSet<Integer> hs = new HashSet<>();
for(ArrayList<Integer> pList : aList){
for(int num : pList){
if(!hs.contains(num)){
hs.add(num);
ansList.add(num);
}
}
}
answer = new int[ansList.size()];
for(int i = 0; i < ansList.size(); i++)
answer[i] = ansList.get(i);
return answer;
}
}
|
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[2019 카카오 개발자 겨울 인턴십] 호텔 방 배정(Union-Find, Java, 자세한 설명, 접근법) (0) | 2020.08.31 |
---|---|
[2019 카카오 개발자 겨울 인턴십] 불량 사용자 (0) | 2020.08.31 |
[2019 KAKAO BLIND RECRUITMENT] 블록 게임(Java, 간단한 코드) (0) | 2020.08.27 |
[2019 KAKAO BLIND RECRUITMENT] 길 찾기 게임(Java, 간단한 코드) (0) | 2020.08.27 |
[2019 KAKAO BLIND RECRUITMENT] 무지의 먹방 라이브(Java) (0) | 2020.08.27 |