본문 바로가기
내일배움캠프/Daily Routine (알고리즘)

[내일배움캠프] 알고리즘 Daily Routine 49. 두 개 뽑아서 더하기

by TIP__ 2024. 10. 14.

안녕하세요.
49회차 과제 "두 개 뽑아서 더하기"입니다.

문제 설명

정수 배열 numbers가 주어집니다.

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

제한 사항

numbers의 길이는 2 이상 100 이하입니다.

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

풀이

나의 풀이

import java.util.*;
class Solution {
    public int[] solution(int[] numbers) {
        HashSet<Integer> set = new HashSet<>();
        for (int i = 0; i < numbers.length; i++) {
            for (int j = 0; j < numbers.length; j++) {
                if(i==j){continue;}
                set.add(numbers[i] + numbers[j]);
            }
        }
        int[] answer = new int[set.size()];
        int cnt = 0;
        for(int i : set){
            answer[cnt++] = i;
        }
        Arrays.sort(answer);
}

 

 

다른 사람의 풀이

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

포인트

 -. HashSet은 중복된 값을 허용하지 않기 때문에 이번처럼 중복된 값을 제외하는 형태의 문제에 적합합니다.

 

 -. set.stream().sorted().mapToInt(Integer::intValue).toArray()

   * .stream() : 컬렉션의 요소를 처리할 수 있는 스트림을 생성합니다.

    * .sorted() : 스트림의 요소를 오름차순 정렬합니다.

   * .mapToInt(Integer::intValue) : 스트림의 요소를 int 타입의 원시 타입으로 맵핑하여 스트림은 IntStream으로 변환됩니다.

   * .toArray() : IntStream의 모든 요소를 int[] 배열로 변환합니다.

저처럼 처음해보시는 분들에게 이 글이 조금이나마 도움이 되었으면 좋겠습니다.

댓글