mingg IT

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

코딩테스트

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

mingg123 2021. 2. 6. 17:34

1. Set 을 만들어서 중복된 값을 저장하지 않도록 하고

 

2. List로 변환 후 오름차순 정렬

 

3. int [] 로 Return 

import java.util.HashSet;
import java.util.Collections;
import java.util.ArrayList;
import java.util.List;
class Solution {
    public int[] solution(int[] numbers) {
        int[] answer = {};
        HashSet<Integer> set = new HashSet<Integer>();
        for(int i = 0; i< numbers.length; i++) {
          for(int j = 0; j<numbers.length; j++) {
              if(i!= j) {
                  set.add(numbers[i]+numbers[j]);
              }
          }  
        }
        List<Integer> list = new ArrayList<>(set);
        Collections.sort(list);
        
         return list.stream().mapToInt(Integer::intValue).toArray();
        // return list.toArray();
    }
}

 

 

다른사람 풀이를 보니 더 좋은 방법이 Set을 바로 Sort하여 return한 경우를 봄

 

set.stream().sorted().mapToInt(Integer::intValue).toArray(); 이런식으로.

 

그리고 댓글보니까 TreeSet을 사용하면 add하면서 정렬도 같이 된다함. 

 

맞는다에 초점을 맞추는 게 아니라 최대한 효율적으로 짤 수 있도록 해야할듯.

 

TreeSet을 보니 이진 검색 트리의 형태로 정렬, 검색에 뛰어난 성능을 보임.

 

import java.util.TreeSet;
import java.util.Collections;
import java.util.ArrayList;
import java.util.List;
class Solution {
    public int[] solution(int[] numbers) {
        int[] answer = {};
        TreeSet<Integer> set = new TreeSet<Integer>();
        for(int i = 0; i< numbers.length; i++) {
          for(int j = 0; j<numbers.length; j++) {
              if(i!= j) {
                  set.add(numbers[i]+numbers[j]);
              }
          }  
        }
         return set.stream().mapToInt(Integer::intValue).toArray();
    }
}

Comments