[JAVA] 프로그래머스 (Lv.1) 두 개 뽑아서 더하기

AIR·2023년 8월 24일
0

링크

https://school.programmers.co.kr/learn/courses/30/lessons/68644


문제 설명

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


제한 조건

  • numbers의 길이는 2 이상 100 이하입니다.
  • numbers의 모든 수는 0 이상 100 이하입니다.

입출력 예

numbersresult
[2,1,3,4,1][2,3,4,5,6,7]
[5,0,2,7][2,5,7,9,12]

나의 코드

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
    	//중복된 값은 제거해야 하므로 Set 인터페이스의 Hashset 클래스를 생성
        Set<Integer> set = new HashSet<>();
		
        //이중 for문을 돌려 set에 배열의 원소끼리 더한 값을 추가
        for (int i = 0; i < numbers.length - 1; i++) {
            for (int j = i+1; j < numbers.length; j++) {
                set.add(numbers[i] + numbers[j]);
            }            
        }
		//Integer 배열에서 int 배열로 변환하기 위해 UnBoxing 수행
        //int 배열을 set의 크기로 생성
        int[] result = new int[set.size()];

        for (int i = 0; i < set.size(); i++) {
            result[i] = (int) set.toArray()[i];
        }
        //오름차순으로 반환해야 하므로 정렬 수행
        Arrays.sort(result);
        return result;
    }
}

다른 사람의 풀이

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();
    }
}

나머지는 내가 푼것과 거의 동일하나
스트림을 이용해 int 배열로 변환하였다.


정리

컬렉션에 Set인터페이스의 구현 클래스인 HashSet을 이용하였고
어렵지 않은 문제였다.
하지만 문제를 풀면서 HashSet, TreeSet, LinkedHashSet의 차이에 대해 공부를 하게 되었다.

HashSet > LinkedHashSet > TreeSet 순서로 성능의 차이를 보이며,
HashSet의 성능이 제일 좋은걸 알 수 있다.


참고

Set 구현 클래스 : https://hun-developer.tistory.com/38

profile
백엔드

0개의 댓글