📘요구 사항 정리
- 정수 배열 numbers가 주어진다.
- numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 오름차순 정렬 후 return
📌 제약 조건
- numbers의 길이는 2 이상 100 이하
- numbers의 모든 수는 0 이상 100 이하
📌 문제 분석
- numbers의 배열이 존재할때 i + (i+1) 이런식으로 계속 더할 수 있게 for문을 사용하면 될 것 같다
- for문을 사용해서 i + (i+1)를 사용하게 된다면, 중복 값이 발생할 것이니 return 할때 중복을 제거해야 한다.
📌 구현코드
package pra.lv1.두개뽑아서더하기;
import java.util.ArrayList;
public class answer_1 {
public static void main(String[] args) {
int [] arr = {2,1,3,4,1};
arr= solution(arr);
for(int i=0;i<arr.length;i++){
System.out.print(arr[i] + " ");
}
}
public static int [] solution(int [] arr){
ArrayList<Integer> result = new ArrayList<>();
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
result.add(arr[i]+arr[j]);
}
}
return result.stream().distinct().sorted().mapToInt(Integer::intValue).toArray();
}
}
📌 구현코드 해설
- 2중 for문을 사용하여 i+ (i+1)을 할 수 있게 해준다.
- 첫번째 for문을 0에서 시작하여 i<arr.length-1 까지 돌 수 있게 해주었다.
- 두번째 for문은 전체 값을 다 더해주어야 하기 때문에 i<arr.length 까지 돌 수 있게 하였다.
- 위 같이 for문을 작성하면 1 2 3 4 배열이 있을때
- 1 + 2, 1+ 3, 1+ 4
- 2 + 3, 2 +4
- 3 + 4
- 이렇게 도는걸 확인할 수 있다.
- 하지만 이렇게 돌게 되면 중복 값이 발생한다.
- 때문에 strema의 distinct를 사용한 후 , sorted를 사용하여 오름차순 정렬을 해주었다.