설명
HashSet은 순서를 보장하지 않고, 중복을 허용하지 않는다.
TreeSet은 HashSet의 특성을 가졌다.추가적으로 생성시 정렬을 지원한다.
TreeSet은 검색기능에 특화된 자료구조입니다. 삭제와 수정시 단점이 있습니다.
예제코드
*설명
*
* 현수는 1부터 100사이의 자연수가 적힌 N장의 카드를 가지고 있습니다. 같은 숫자의 카드가 여러장 있을 수 있습니다.
*
* 현수는 이 중 3장을 뽑아 각 카드에 적힌 수를 합한 값을 기록하려고 합니다. 3장을 뽑을 수 있는 모든 경우를 기록합니다.
*
* 기록한 값 중 K번째로 큰 수를 출력하는 프로그램을 작성하세요.
*
* 만약 큰 수부터 만들어진 수가 25 25 23 23 22 20 19......이고 K값이 3이라면 K번째 큰 값은 22입니다.
*
*
* 입력
*
* 첫 줄에 자연수 N(3<=N<=100)과 K(1<=K<=50) 입력되고, 그 다음 줄에 N개의 카드값이 입력된다.
*
* 현수는 1부터 100사이의 자연수가 적힌 N장의 카드를 가지고 있습니다. 같은 숫자의 카드가 여러장 있을 수 있습니다.
*
* 현수는 이 중 3장을 뽑아 각 카드에 적힌 수를 합한 값을 기록하려고 합니다. 3장을 뽑을 수 있는 모든 경우를 기록합니다.
*
* 기록한 값 중 K번째로 큰 수를 출력하는 프로그램을 작성하세요.
*
* 만약 큰 수부터 만들어진 수가 25 25 23 23 22 20 19......이고 K값이 3이라면 K번째 큰 값은 22입니다.
*
*
* 입력
*
* 첫 줄에 자연수 N(3<=N<=100)과 K(1<=K<=50) 입력되고, 그 다음 줄에 N개의 카드값이 입력된다.
private static void solution(int N, int K, int[] arr) {
int answer;
// 중복이 없이 내림차순으로 정렬해서 넣는다.
TreeSet<Integer> Tset = new TreeSet<>(Collections.reverseOrder());
if (N < K)
System.out.println(-1);
for (int i = 0; i < N; i++) {
for (int j = i+1; j < N; j++) {
for (int k = j+1; k < N; k++) {
Tset.add(arr[i] + arr[j] + arr[k]);
}
}
}
int cnt = 0;
for (Integer o : Tset) {
cnt++;
if (cnt == K)
System.out.println(o);
}
}
1. 내림차순의 중복을 허용하지 않는 TreeSet 생성
2. 3중 포문을 거치며, 중복된 수의합은 배제
3. k번째 수를 출력