ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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
        }
    }
Designed by Tistory.