잉?

[프로그래머스] 두 개 뽑아서 더하기 (JAVA 자바) 본문

알고리즘_Algorism/프로그래머스

[프로그래머스] 두 개 뽑아서 더하기 (JAVA 자바)

Jye_647 2023. 7. 31. 08:53


이번에도 두 가지 방법으로 풀었다.

하나는 TreeSet을 사용하고, 다른 하나는 HashSet을 사용했다.

 

[TreeSet]

public int[] solution(int[] numbers) {
    // TreeSet은 중복X, 기본 오름차순
    TreeSet<Integer> hapList = new TreeSet<>();

    for(int i=0; i<numbers.length; i++){
        for(int j=i+1; j<numbers.length; j++){
            hapList.add(numbers[i]+numbers[j]);
        }
    }
    // Integer -> int
    // mapToInt : 스트림을 IntStream으로 변환
    int[] answer =  hapList.stream().mapToInt(Integer::intValue).toArray();

    return answer;
}

//    테스트 1 〉	통과 (3.72ms, 73.4MB)
//    테스트 2 〉	통과 (3.06ms, 79.3MB)
//    테스트 3 〉	통과 (2.38ms, 77.1MB)
//    테스트 4 〉	통과 (3.23ms, 72.5MB)
//    테스트 5 〉	통과 (3.37ms, 70.5MB)
//    테스트 6 〉	통과 (5.05ms, 75.5MB)
//    테스트 7 〉	통과 (9.56ms, 78.9MB)
//    테스트 8 〉	통과 (5.86ms, 69.1MB)
//    테스트 9 〉	통과 (3.77ms, 75.3MB)

TreeSet은 중복을 허용하지 않고, 오름차순이 디폴트이다.

 

stream을 사용하는 이유?

데이터소스마다 다른 방식으로 다뤄야 한다는 문제점.

(Collection.sort(), Arrays.sort()) 이런 문제점을 해결하기 위해 stream을 사용함.

그리고 속도가 느리다.


[HashSet]

public int[] solution(int[] numbers) {
        // 중복 X
        HashSet<Integer> num = new HashSet<>();

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

        // 정렬을 위해 list로 변환
        ArrayList<Integer> arr = new ArrayList<>(num);
        // list 정렬 Collenctions
        Collections.sort(arr);

        // Integer -> int 변환
        int[] answer = new int[arr.size()];
        for(int i=0; i<arr.size(); i++){
            answer[i] += arr.get(i);
        }

        return answer;
    }

//    테스트 1 〉	통과 (0.26ms, 80.4MB)
//    테스트 2 〉	통과 (0.45ms, 72MB)
//    테스트 3 〉	통과 (0.23ms, 76.4MB)
//    테스트 4 〉	통과 (0.28ms, 72.8MB)
//    테스트 5 〉	통과 (0.49ms, 77MB)
//    테스트 6 〉	통과 (0.59ms, 75MB)
//    테스트 7 〉	통과 (1.72ms, 76MB)
//    테스트 8 〉	통과 (1.27ms, 73.4MB)
//    테스트 9 〉	통과 (0.77ms, 71.8MB)

HashSet은 중복을 허용하지 않는다.

하지만 순서가 없기에 리스트로 변경 후 정렬을 해줘야 한다.

Comments