-
[Java] - 두 개 뽑아서 더하기 (68644) (Set/ TreeSet)알고리즘/프로그래머스 2024. 3. 4. 09:36
📚 문제 - 68644
정수 배열 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 해야 합니다.
⌨️ 작성한 코드
import java.util.Set; import java.util.TreeSet; class Solution { public int[] solution(int[] numbers) { Set<Integer> resultSet = new TreeSet<>(); // 두 수의 합을 구하여 resultSet에 저장 for (int i = 0; i < numbers.length; i++) { for (int j = i + 1; j < numbers.length; j++) { resultSet.add(numbers[i] + numbers[j]); } } // Set을 배열로 변환 int[] answer = new int[resultSet.size()]; int index = 0; for (int num : resultSet) { answer[index++] = num; } return answer; } }
✅ 배운 점
[ Set ]
Set은 중복을 허용하지 않는 데이터 집합을 나타내는 인터페이스이다. 즉, Set에는 동일한 요소를 여러 번 추가할 수 없다. 이는 데이터의 고유성을 보장해준다.
Set의 구현: Set 인터페이스를 구현하는 다양한 클래스이 있는데, 대표적으로는 HashSet, TreeSet, LinkedHashSet 이다.
- HashSet:
- 해시 테이블을 사용하여 요소를 저장하는 Set 구현체
- 해시 테이블은 요소의 추가, 삭제, 조회에 대해 빠른 성능
- 요소의 순서는 보장X - TreeSet:
- 이진 검색 트리를 사용하여 요소를 저장하는 Set 구현체
- 요소들은 자동으로 오름차순으로 정렬된 상태로 저장되며, 검색 및 범위 질의와 관련된 작업에 대해 높은 성능 - LinkedHashSet:
- 해시 테이블과 연결 리스트를 결합하여 요소를 저장하는 Set 구현체
- 요소들은 추가된 순서대로 저장되며, 해시 테이블의 빠른 검색 성능과 연결 리스트의 요소 순서 유지 성능을 모두 O
Set 인터페이스의 주요 메소드
import java.util.HashSet; import java.util.Set; public class Main { public static void main(String[] args) { // HashSet 인스턴스 생성 Set<String> set = new HashSet<>(); // add(E e) 메소드: 지정된 요소를 Set에 추가합니다. set.add("apple"); set.add("banana"); set.add("orange"); System.out.println("After adding elements: " + set); // [banana, orange, apple] // 이미 존재하는 요소 추가 시, false 반환 boolean added = set.add("apple"); System.out.println("Was 'apple' added again? " + added); // false // remove(Object o) 메소드: 지정된 요소를 Set에서 제거 boolean removed = set.remove("banana"); System.out.println("Was 'banana' removed? " + removed); // true System.out.println("After removing 'banana': " + set); // [orange, apple] // 요소가 Set에 없으면 제거 시 false 반환 removed = set.remove("grape"); System.out.println("Was 'grape' removed? " + removed); // false // contains(Object o) 메소드: 지정된 요소의 Set에 존재 여부 확인 boolean contains = set.contains("orange"); System.out.println("Does the set contain 'orange'? " + contains); // true // isEmpty() 메소드: Set이 비어있는지 여부를 반환 boolean empty = set.isEmpty(); System.out.println("Is the set empty? " + empty); // false // size() 메소드: Set에 포함된 요소의 개수를 반환 int size = set.size(); System.out.println("Size of the set: " + size); // 2 } }
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[Java] - 가장 가까운 같은 글자 (142086) (LinkedHashMap) (0) 2024.03.04 [Java] - [1차] 비밀지도 (17681) (toBinaryString()/ format()) (1) 2024.03.04 [Java] - K번째수 (42748) (0) 2024.02.29 [Java] - 푸드 파이트 대회 (134240) (String / StringBuffer & StringBuilder) (1) 2024.02.29 [Java] - 숫자 문자열과 영단어 (81301: 2021 카카오 채용연계형 인턴십) (0) 2024.02.28