문제 설명
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
제한사항
- numbers의 길이는 2 이상 100 이하입니다.
- numbers의 모든 수는 0 이상 100 이하입니다.
입출력 예
numbers result
[2,1,3,4,1] | [2,3,4,5,6,7] |
[5,0,2,7] | [2,5,7,9,12] |
입출력 예 설명
입출력 예 #1
- 2 = 1 + 1 입니다. (1이 numbers에 두 개 있습니다.)
- 3 = 2 + 1 입니다.
- 4 = 1 + 3 입니다.
- 5 = 1 + 4 = 2 + 3 입니다.
- 6 = 2 + 4 입니다.
- 7 = 3 + 4 입니다.
- 따라서 [2,3,4,5,6,7] 을 return 해야 합니다.
입출력 예 #2
- 2 = 0 + 2 입니다.
- 5 = 5 + 0 입니다.
- 7 = 0 + 7 = 5 + 2 입니다.
- 9 = 2 + 7 입니다.
- 12 = 5 + 7 입니다.
- 따라서 [2,5,7,9,12] 를 return 해야 합니다.
package LV1;
import java.util.*;
public class H68644 {
public static ArrayList<Integer> solution(int[] numbers) { //정답을 담을 ArrayList 생성
HashSet<Integer>set= new HashSet<>(); //중복값을 지워줄 HashSet 생성
for(int i=0;i<numbers.length-1;i++) {
for(int j=i+1;j<numbers.length;j++) set.add(numbers[i]+numbers[j]); //HashSet에 두 수의 합을 저장
}
ArrayList<Integer>list=new ArrayList<>(set); //Set은 순서가 없기때문에 ArrayList로 변환
list.sort(null); // collrection.sort가 아닌 ArrayList의 sort를 사용
return list;
}
public static void main(String[] args) {
int[] numbers = new int[]{2,1,3,4,1};
System.out.println(Arrays.toString(new ArrayList[]{solution(numbers)}));
}
}
// a, b, c, d가 있으면 각각 더해서 값을 도출하고 오름차순으로 정렬한다.
Java TreeSet 클래스는 저장을 위해 트리를 사용하는 Set 인터페이스를 구현합니다. AbstractSet 클래스를 상속하고 NavigableSet 인터페이스를 구현합니다. TreeSet 클래스의 개체는 오름차순으로 저장됩니다.
Java TreeSet 클래스에 대한 중요한 사항은 다음과 같습니다.
- Java TreeSet 클래스에는 HashSet과 같은 고유한 요소만 포함되어 있습니다.
- Java TreeSet 클래스 액세스 및 검색 시간이 조용하고 빠릅니다.
- Java TreeSet 클래스는 null 요소를 허용하지 않습니다.
- Java TreeSet 클래스가 동기화되지 않았습니다.
- Java TreeSet 클래스는 오름차순을 유지합니다.
- Java TreeSet 클래스에는 HashSet과 같은 고유한 요소만 포함되어 있습니다.
- Java TreeSet 클래스 액세스 및 검색 시간은 매우 빠릅니다.
- Java TreeSet 클래스는 null 요소를 허용하지 않습니다.
- Java TreeSet 클래스가 동기화되지 않았습니다.
- Java TreeSet 클래스는 오름차순을 유지합니다.
- TreeSet은 비교할 수 있는 일반 유형만 허용할 수 있습니다. 예를 들어 Comparable 인터페이스는 StringBuffer 클래스에 의해 구현됩니다.
TreeSet 클래스의 내부 작업
TreeSet은 Red-Black Tree처럼 자체 균형을 이루는 이진 검색 트리를 사용하여 구현되고 있습니다. 따라서 검색, 제거 및 추가와 같은 작업은 O(log(N)) 시간을 소비합니다. 그 이유는 자체 균형 트리에 있습니다. 언급된 모든 작업에 대해 트리 높이가 O(log(N))를 초과하지 않도록 하기 위해 존재합니다. 따라서 정렬된 큰 데이터를 유지하고 작업을 수행하기 위한 효율적인 데이터 구조 중 하나입니다.
TreeSet 클래스의 동기화
위에서 이미 언급했듯이 TreeSet 클래스는 동기화되지 않습니다. 둘 이상의 스레드가 트리 집합에 동시에 액세스하고 액세스하는 스레드 중 하나가 이를 수정하는 경우 동기화를 수동으로 수행해야 합니다. 일반적으로 집합을 캡슐화하는 일부 개체 동기화를 수행하여 수행됩니다. 그러나 그러한 개체가 없는 경우 Collections.synchronizedSet() 메서드를 사용하여 집합을 래핑해야 합니다. 세트의 비동기 액세스를 피하기 위해 작성 시간 동안 메소드를 사용하는 것이 좋습니다. 다음 코드 스니펫은 동일한 내용을 보여줍니다.
'알고리즘 > 프로그래머스 JAVA LV.1' 카테고리의 다른 글
모의고사 (0) | 2023.01.28 |
---|---|
로또의 최고 순위와 최저순위 (0) | 2023.01.28 |
같은 숫자는 싫어 (0) | 2023.01.28 |
최소직사각형 (0) | 2023.01.28 |
3진법 뒤집기 (0) | 2023.01.28 |