CODING/스파르타 내일배움캠프 TIL

51_두 개 뽑아서 더하기_25.2.28(금)

codingTrip 2025. 3. 10. 09:31

코드카타

49) 두 개 뽑아서 더하기

나의 풀이

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
        int[] answer = {};
        Set<Integer> set = new HashSet<>();

        for (int i = 0; i < numbers.length; i++) {
            for (int j = 0; j < numbers.length; j++) {
                if (i != j){
                    set.add(numbers[i]+numbers[j]);
                }
            }
        }

        List<Integer> setList = new ArrayList<>(set);
        Collections.sort(setList);
        answer = setList.stream().mapToInt(Integer::intValue).toArray();
        return answer;
    }
}

Set이 중복 없다는 걸 깨닫고

Set을 선택했고, 정렬을 위해 List로 다시 바꾸었다.

 

다른 분들의 풀이

import java.util.HashSet;
import java.util.Set;

class Solution {
     public int[] solution(int[] numbers) {
        Set<Integer> set = new HashSet<>();

        for(int i=0; i<numbers.length; i++) {
            for(int j=i+1; j<numbers.length; j++) {
                set.add(numbers[i] + numbers[j]);
            }
        }

        return set.stream().sorted().mapToInt(Integer::intValue).toArray();
    }
}

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/68644/solution_groups?language=java

스트림을 사용하셔서 sort하셨다.

 

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
        int[] answer = {};
        Set<Integer> set = new TreeSet<>();

        for (int i = 0; i < numbers.length; i++) {
            for (int j = 0; j < numbers.length; j++) {
                if (i != j){
                    set.add(numbers[i]+numbers[j]);
                }
            }
        }

        answer = set.stream().mapToInt(Integer::intValue).toArray();
        return answer;
    }
}

TreeSet을 사용하면 add하면서 정렬도 같이 된다고 하셔서 위처럼 수정해보았다.

그러나 HashSet과 TreeSet의 데이터 삽입 시 시간복잡도 차이 때문에 HashSet가 조금 더 빠르다고 한다.

 

그래도 내가 배열 -> 컬렌션으로 넘어가는 것 같아서

그동안의 나의 노력이 헛되지는 않았다는 생각이 들었다.