프로그래머스

99클럽 코테 스터디 10일차 TIL 두 개 뽑아서 더하기(Java)

리콜 2024. 4. 7. 23:40

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제를 처음 봤을때 결과값 배열이 중복이 되면 안되니 

HashSet을 떠올리게 되었다.

 

그래서 그 진행대로 코드를 진행하였는데

 

 

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
        HashSet<Integer> set = new HashSet<>();
        ArrayList<Integer> arr = new ArrayList<>();
        
        
        for(int i =0;i<numbers.length -1;i++){
            for(int k=i+1; k < numbers.length; k++){
                int temp= numbers[i] + numbers[k];
                set.add(temp);
            }
        }
        Iterator<Integer> iter = set.iterator();
        while(iter.hasNext()){
            arr.add(iter.next());
        }
        int[] answer = new int[arr.size()];
        for(int i=0;i<arr.size();i++){
            answer[i]= arr.get(i);
        }
        return answer;
    }
}

실패가 떳다.

그래서 코드를 보다가 결국 contains를 사용하면 되겠다고 생각해서

조금더 간결하게 바꿀수 있었다.

 

또한 Array로 바꾸는게 조금 난감 하여서 조금 쉽게 하는 방법 없나 찾다가

다른 사람의 코드를 보고 stream의 toArray를 사용하는 것을 알게 되어 맞추어 수정했다.

import java.util.*;

class Solution {
   public int[] solution(int[] numbers) {
        ArrayList<Integer> arr = new ArrayList<>();
        
        for(int i =0;i<numbers.length -1;i++){
            for(int k=i+1; k < numbers.length; k++){
                int temp= numbers[i] + numbers[k];
                if(!arr.contains(temp)){
                    arr.add(temp);
                }
            }
        }
        
        return arr.stream().sorted().mapToInt(i -> i).toArray();
        
    }
}

 

반응형