[JAVA] 두 개 뽑아서 더하기

태히·2021년 1월 25일
0

코딩테스트 연습

목록 보기
6/9

문제설명

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

제한사항

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

처음 떠오른 생각

사실 이 문제는 저번에 JavaScript로 풀어본 적이 있다. 그래서 그때 풀었던 기억이 나 순조롭게 풀었다.
우선 --> 배열안의 수들을 모두 더한 값들을 넣어주고 --> 중복을 제거한다. --> 그리고 정렬. -->END

문제 풀이

import java.util.*;

class Solution{
    public int[] solution(int[] numbers){

        ArrayList<Integer> array = new ArrayList<Integer>();    //Integer타입의 ArrayList생성

        for(int i=0; i<numbers.length-1; i++){
            for(int j=i+1; j< numbers.length; j++){
                if(!array.contains(numbers[i]+numbers[j])){     //numbers[]를 돌면서 바로다음 값과 더해주는데
                    array.add(numbers[i]+numbers[j]);           //만약 array.contains()를 사용하여 더한 수가 array에 존재하지 않으면
                }                                               //array.add()로 그 수를 넣어준다.
            }
        }
        Collections.sort(array);                                //array 정렬

        int [] answer = new int[array.size()];                  //int배열을 반환하기위해 array.size크기만한 배열 생성

        for(int i=0; i<answer.length; i++){
            answer[i] = array.get(i);                           //List array값들을 answer배열에 복사해 준다.
        }
           /* //결과값 확인
        System.out.print(array);    //중복제거 전

        for(int i: answer){
            System.out.print(i + " ");// 정렬 후
        }
*/
        return answer;
    }
}

이번엔 ArrayList를 사용하여 풀었다. 이렇게 풀으니 훨씬 수월하게 풀게되었다.
for문을 사용해 number[]배열을 돌며 하나씩 값을 더해주고
array.contains()를 이용해 중복되는 값이 있는지 확인하고 array에 넣어준다.

Collections.sort()로 중복제거된 값이 있는 array를 오름차순으로 정렬해준다.
(Collections.reverse()는 내림차순이다.)

마지막으로 int형으로 반환하기위해 int형 answer배열을 array.size()크기만큼 생성해주고 array값을 answer에 복사해준다. 그리고 answer를 반환하면 끝.

profile
하고싶은게 많은 개발자가 되고싶은

0개의 댓글