본문 바로가기

ALGORITHM

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

 

코딩테스트 연습 - 두 개 뽑아서 더하기

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

programmers.co.kr

소요 시간 - 1시간 30분

 

🔑문제 해결

 

전체적인 부분은 쉽게 풀었는데 바보 같이 헤맸던 부분 ---> int j = i + 1

(기준이 되는 수는 고정해두고, 비교 대상이 되는 수들이랑 비교할 때는 기준이 되는 수는 제외하니까 i + 1 !!!!)

 

배열에서 중복되는 값은 제거해야하므로 자동으로 제거하기 위해 set에 저장했다.

그리고 set을 list로 변환하고 list를 다시 배열로 변환했다. (리턴값이 배열이기 때문)

 

🔎소스 코드

 

set -> list 변환

List<Integer> list = new LinkedList<>(set);

 

list -> Array 변환

int[] answer = list.stream().mapToInt(i->i).toArray();

 

package step1;

import java.util.*;

// 두 개 뽑아서 더하기
public class Ex02 {

	public static void main(String[] args) {
		
		int[] numbers = { 5, 0, 2, 7 };
		
		System.out.println(solution(numbers));

	}
	
	public static int[] solution(int[] numbers) {
		
		int[] answer = {};
		
		Set<Integer> set = new HashSet<>();
		
		for(int i = 0; i < numbers.length; i++) { // 기준이 되는 수
			
			for(int j = i+1; j < numbers.length; j++) { // # int j = i + 1
				
				set.add(numbers[i] + numbers[j]);
				
			}
			
		}
		
		List<Integer> list = new LinkedList<>(set); // set -> list로 변환
		Collections.sort(list); // list 정렬
		
		answer = list.stream().mapToInt(i->i).toArray(); // list -> int[]로 변환
	
		return answer;
		
	}

}