1. for문쓰고 answer에 대입하는 것까지 입력을 하고나서, 중복 삭제와 배열의 정렬 방법을 찾다가
HashSet 이라는 것을 찾았는데, HashSet보다 현 문제에 더 적합한 TreeSet을 찾았고,
굳이 형변환 하며 풀지 않아도 TreeSet 하나만으로 삭제와 정렬이 가능하다는 것을 알았다.
import java.util.*;
class Solution {
public TreeSet<Integer> solution(int[] numbers) {
TreeSet<Integer> answer = new TreeSet<Integer>();
for (int i = 0; i<numbers.length; i++){
for (int j = i+1; j<numbers.length; j++) {
answer.add(numbers[i] + numbers[j]);
} System.out.println(answer);
}
return answer;
}
}
vscode
import java.util.*;
class Solution {
public static void main(String[] arg) {
int[] numbers = {2, 1, 3, 4, 1};
System.out.println(solution(numbers));
}
public static TreeSet<Integer> solution(int[] numbers) {
TreeSet<Integer> answer = new TreeSet<Integer>();
for (int i = 0; i<numbers.length; i++){
for (int j = i+1; j<numbers.length; j++) {
answer.add(numbers[i] + numbers[j]);
} System.out.println(answer);
}
return answer;
}
}
TreeSet은
이진검색트리*라는 자료구조의 형태로 데이터를 저장
*이진 트리(二進-, 영어: binary tree)는 각각의 노드가 최대 두 개의 자식 노드를 가지는 트리 자료 구조로,
자식 노드를 각각 왼쪽 자식 노드와 오른쪽 자식 노드라고 한다.
정렬,검색,범위검색에 높은 성능을 보이며,
Set 인터페이스*를 구현한 클래스이다.
*인터페이스(interface)란 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서,
다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스를 의미합니다.
Set은 한국말로는 "집합"이고,
따로 저장 순서를 유지하지는 않으며, 중복 값을 허용하지 않는다는 특징을 갖고 있습니다.
그래서 간략히 TreeSet의 특징을 정리하자면
- 객체를 중복 저장하지 않음 = Set의 성질
- 저장 순서 유지하지 않음 = Set의 성질
- 이진 탐색 트리(BinarySearchTree) 구조
- -> HashSet보다 검색과 정렬에는 유리
- 기본적으로 nature ordering (정렬)
- ->HashSet은 natural ordering이 적용 안된다
이런특징들을 가진 TreeSet을 사용하여 코드를 더욱 짧게 만들 수 있었습니다.
다른답안1
import java.util.ArrayList;
import java.util.Collections;
class Solution {
public int[] solution(int[] numbers) {
int sum = 0;
ArrayList<Integer> sumList = new ArrayList<Integer>();
//-1중복의 제거, 하지만 다음에 중복의 제거가 있기 때문에 없어도된다.
for(int i =0; i<numbers.length-1; i++){
//array.length-1 배열에 마지막에 들어있는 값 / array.length 배열에 들어있는 갯수
for(int j =i+1; j<numbers.length; j++){
sum = numbers[i] + numbers[j];
if(!sumList.contains(sum)){
sumList.add(sum);
//중복의 제거 역할
//ArrayList.contains()는객체를 인자로 받고, 리스트에 그 객체가 존재하면 true를 리턴
}
}
}
Collections.sort(sumList);
//ArrayList = 컬렉션을 정렬할때 Collection.sort사용
//Array를 sort할때는 Array.sort 사용
System.out.println(sumList);
int[] answer = new int[sumList.size()];
//answer에 sumList의 인덱스갯수 넣고 for문 돌리기
for(int i = 0; i<answer.length; i++){
answer[i] = sumList.get(i);
}
//ArrayList.get()은 인자로 인덱스를 받는다. 이인덱스위치에있는 객체를 리턴
return answer;
}
}
ArrayList.contains()
contains(Object o)는 객체를 인자로 전달받습니다. 리스트에 그 객체가 존재하면 true를 리턴합니다.
객체 존재 유무로 boolean을 리턴하기 때문에, if와 함께 사용할 수 있습니다.
Collection.sort();
컬랙션을 정렬할 때는 collection.sort 사용
배열을 정렬할 때는 Array.sort 사용
'Programmers > java' 카테고리의 다른 글
[JAVA] Programmers 문자열을 정수로 바꾸기 ☑ (0) | 2022.07.11 |
---|---|
[JAVA] Programmers 자릿수 더하기 ☑ (0) | 2022.07.11 |
[JAVA] Programmers 소수 만들기 ☑ (0) | 2022.06.15 |
[JAVA] Programmers 부족한 금액 계산하기 ☑ (0) | 2022.06.14 |
[JAVA] Programmers 서울에서 김서방 찾기 ☑ (0) | 2022.06.13 |