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


프로그래머스 “두 개 뽑아서 더하기” 문제 해결과정입니다.

두 개 뽑아서 더하기

문제설명

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

제한사항

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

입출력 예

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

입출력 예 설명

입출력 예 #1

  • 2 = 1 + 1 입니다. (1이 numbers에 두 개 있습니다.)
  • 3 = 2 + 1 입니다.
  • 4 = 1 + 3 입니다.
  • 5 = 1 + 4 = 2 + 3 입니다.
  • 6 = 2 + 4 입니다.
  • 7 = 3 + 4 입니다.
  • 따라서 [2,3,4,5,6,7] 을 return 해야 합니다.

입출력 예 #2

  • 2 = 0 + 2 입니다.
  • 5 = 5 + 0 입니다.
  • 7 = 0 + 7 = 5 + 2 입니다.
  • 9 = 2 + 7 입니다.
  • 12 = 5 + 7 입니다.
  • 따라서 [2,5,7,9,12] 를 return 해야 합니다.

문제 해결과정

프로그래머스 코드

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
        
		Set<Integer> set = new TreeSet();
		
		for(int i = 0; i < numbers.length; i++) {
			for(int j = i+1; j < numbers.length; j++) set.add(numbers[i] + numbers[j]);
		}
		int[] result = new int[set.size()];
		int num = 0;
		for(int k : set) result[num++] = k;
		return result;
    }
}
  1. 문제가 원하는 건 numbers의 서로 다른 인덱스의 요소들을 더했을 때 중복되지 않는 수의 배열을 오름차순으로 출력하는 것이다.
  2. set을 사용한 이유는 중복되는 수가 없다는 것이며, TreeSet은 내부의 요소들을 알아서 오름차순으로 정렬해준다는 특징 때문이다.
  3. numbers의 요소들을 이중 for문으로 더하며 set에 삽입해준다.
  4. 출력할 int 타입 배열을 선언 후 set의 요소들을 삽입한다.

다섯 줄 코드

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
        
		Set<Integer> set = new TreeSet();
		
		for(int i = 0; i < numbers.length; i++) {
			for(int j = i+1; j < numbers.length; j++) set.add(numbers[i] + numbers[j]);
		}
        return set.stream().mapToInt(Integer::intValue).toArray();
    }
}
  1. set의 요소를 스트림으로 변환
  2. 스트림의 각 요소를 mapToInt, Integer::intValue를 통해 Integer 요소를 int 타입으로 변환
  3. toArray()를 통해 요소를 배열로 변환

정리

  1. TreeSet 선언
  2. 이중 for문으로 각 인덱스 더하며 set에 삽입
  3. set의 요소들을 result에 삽입

댓글 남기기

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.