송민준의 개발노트

프로그래머스 두 개 뽑아서 더하기 본문

알고리즘/프로그래머스

프로그래머스 두 개 뽑아서 더하기

송민준 2021. 1. 31. 23:44

programmers.co.kr/learn/courses/30/lessons/68644

 

코딩테스트 연습 - 두 개 뽑아서 더하기

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한

programmers.co.kr

두개 뽑아서 더한 결과를 반환하는데 중복이 없어야 하며 오름차순으로 정렬이 되어 있어야함.

이중 for문으로 탐색을 함. TreeSet을 써서 정렬과 중복제거의 효과를 가짐

 

import java.util.Set;
import java.util.TreeSet;

public class PickTwoAndAdd {
    public static int[] solution(int[] numbers) {
        Set<Integer> answerSet = new TreeSet<>();
        for(int i = 0; i < numbers.length-1; i++) {
            for(int j = i+1; j < numbers.length; j++) {
                answerSet.add(numbers[i]+numbers[j]);
            }
        }

        return answerSet.stream().mapToInt(i -> i).toArray();
    }
}

가독성은 좋으나 속도가 느리다는 단점이 있음.

HashSet을 써서 속도를 좀 더 높일 수는 있으나 stream을 쓴다는 거 자체가 비용이 높음.