Study/Algorithm

프로그래머스 / 두 개 뽑아서 더하기(Java)

개발개발개발 2020. 9. 23. 16:04

문제 설명

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

 

입출력 예

numbers result
[2,1,3,4,1] [2,3,4,5,6,7]
[5,0,2,7] [2,5,7,9,12]

조건 1 : 만들 수 있는 모든 수를 배열에 오름차순으로 담는다. (중복 x)

 

내가 생각한 해결 방법

배열을 오름차순으로 정렬한 뒤 for문을 사용하여 하나씩 더한다.

그리고 list에서 있는 숫자인지 확인 후 list에 넣는다.

 

   public int[] solution(int[] numbers) {
		Arrays.sort(numbers);
		List<Integer> ar = new ArrayList<Integer>();
		for(int i=0; i<numbers.length-1; i++) {
			for(int j=i+1; j<numbers.length; j++) {
				int tmp = numbers[i]+numbers[j];
				if(!ar.contains(tmp)) {
					ar.add(tmp);
				}
			}
		}
		int[] answer = new int[ar.size()];
		Collections.sort(ar);
		for(int i=0; i<ar.size(); i++) {
			answer[i] = ar.get(i);
		}
		
		return answer;
    }

 

 

모든 테스트 케이스를 통과하긴 하였지만 다른 사람의 풀이를 보고 감탄하였다.

 

hashset 자료구조를 활용하여 값을 넣었고 stream함수와 람다 방식을 활용하여 데이터를 반환하였다.

hashset은 중복 값을 포함하지 않기 때문에 별도의 처리 과정 없이 바로 넣을 수 있다. 또한 stream 함수와 람다 방식은 단 한 줄로 오름차순으로 정렬하고 배열로 만들어 값을 반환할 수 있다. 

 

대단하네