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

Jhanoo·2024년 8월 2일

알고리즘 스터디

목록 보기
1/80

문제

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


풀이 당시 떠올린 Idea

HashSet을 사용하여 중복 제거 -> sort하기 불편하다 생각함
ArrayList에서 중복 제거 후 sort (채택)


풀이 후 알게 된 Idea

TreeSet이 red-black tree로 구현되어 있어 삽입과 동시에 정렬됨을 알게 되었다.


코드 풀이

  1. numbers 배열에서 이중 for문을 통해 서로 다른 2개의 number 합을 구한다.
  2. 중복되는 값을 빼고자 ArrayList의 remove()를 사용하여 추가하려는 값이 이미 존재하면 제거하고 add()한다.
  3. sort()
  4. Integer List -> Array로 변환 후 return

작성한 코드

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
		List<Integer> result = new ArrayList<>();
        
		for (int i = 0; i < numbers.length; i++) {
			for (int j = i + 1; j < numbers.length; j++) {
				result.remove(new Integer(numbers[i] + numbers[j]));
				result.add(numbers[i] + numbers[j]);
			}
		}
		result.sort((o1, o2) -> o1 - o2);

		int[] answer = new int[result.size()];
		for (int i = 0; i < result.size(); i++) {
			answer[i] = result.get(i);
		}

		return answer;
	}
}
profile
어떻게든 해내는 사람

0개의 댓글