[프로그래머스 코딩테스트] 두개 뽑아 더하기

gyeol·2023년 9월 26일

코딩테스트 공부

목록 보기
11/53
post-thumbnail

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

먼저 두개의 수를 뽑아 더하고 우리가 지정한 배열에 값이 없으면 값을 넣어준 뒤, 오름차순으로 정렬해줘야 한다.

크게 두가지 방법을 떠올렸다.
1. ArrayList를 사용해 리턴해주기
2. TreeSet을 사용해서 리턴해주기

ArrayList 사용

import java.util.*;

class Solution {
    public ArrayList<Integer> solution(int[] numbers) {
        ArrayList<Integer> sum = new ArrayList<>();
        
        for(int i=0; i<numbers.length-1; i++){
            for(int j=i+1; j<numbers.length; j++){
                if(!sum.contains(numbers[i]+numbers[j])){
                    sum.add(numbers[i]+numbers[j]);
                }
            }
        }
        
        Collections.sort(sum);
        
        return sum;
    }
}

contains()함수를 사용해서 sum안에 해당 값이 있는지 검사하고 없으면 두 값을 더한 결과를 넣어준다. 그리고 Collections.sort() 함수를 이용해서 오름차순으로 정렬해준다.

TreeSet 사용

TreeSetHashSet과 마찬가지로 Set 인터페이스를 구현한 클래스로써 Set 성질을 그대로 가지고 있다. TreeSet은 이진탐색트리 형태를 이용한 Set 구현체로 오름차순으로 원소를 저장한다. HashSet에 비해 탐색 속도는 느리지만 이진탐색트리를 이용하기에 데이터 정렬이 가능하다.

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
        TreeSet<Integer> sum = new TreeSet<>();
        
        for(int i=0; i<numbers.length-1; i++){
            for(int j=i+1; j<numbers.length; j++){
                sum.add(numbers[i]+numbers[j]);
            }
        }
        
        
        return sum.stream().mapToInt(Integer::intValue).toArray();
    }
}

전체적인 틀은 ArrayList를 사용한 것과 크게 다르지 않다. 하지만 크게 다른 점은 TreeSet은 값을 넣는 순간 오름차순으로 착착 정렬해주기 때문에 따로 sort() 부분이 필요하지 않다는 점이다.
이때 우리는 반환 값을 정수형 배열로 지정해줬기에 TreeSetstream()을 사용해 배열형으로 바꿔주면 된다.

profile
공부 기록 공간 '◡'

0개의 댓글