[프로그래머스/68644] 두 개 뽑아서 더하기

☑️ 문제

프로그래머스 68644

☑️ 풀이

과정

  1. 두 수를 선택하는 모든 경우의 수
  2. 두 수를 더해서 새로운 배열에 저장 후 중복값 제거
  3. 오름차순 정렬 후 리턴

첫 번째 풀이 (HashSet)

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
  
        HashSet<Integer> set = new HashSet<>();
        
        for (int i = 0; i < numbers.length -1; i++) {
            for (int j = i + 1; j < numbers.length; j++) {
                set.add(numbers[i] + numbers[j]);
            }
        }
        
        int[] arr = new int[set.size()];
        
        Iterator<Integer> iter = set.iterator();
        int idx = 0;
        while (iter.hasNext()) {
            arr[idx++] = iter.next();
        }
        
        Arrays.sort(arr);
        
        return arr;
    }
}
  1. 먼저 HashSet을 사용해서 이중 for문으로 두 수를 더한 합의 중복을 제외한다.
  2. Iterator로 HashSet의 모든 원소를 배열에 추가한 후, 오름차순 정렬을 했다.
    • Iterator를 쓰지 않고 for문을 사용할 수 있다.
      • 여기서 SetInteger 타입 원소를 int 타입의 배열에 넣을 수 있는 건 자바의 auto-unboxing(오토 언박싱) 때문!
        int[] arr = new int[set.size()];
        int idx = 0; 
                      
        for (Integer i : set) {
            arr[idx++] = i;
        }
                      
        Arrays.sort(arr);
              
        return arr;
      
    • Stream을 사용해서 HashSet을 오름차순 정렬 후 배열 형태로 리턴할 수도 있다.

        return set.stream().sorted().mapToInt(Integer::intValue).toArray();
      

© 2021. All rights reserved.

yaejinkong의 블로그