![[프로그래머스] 두 개 뽑아서 더하기 - LV1](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frvo4T%2FbtsMNKiipvB%2F5rBNS4ORsAPGFZwA8i1sDK%2Fimg.png)
📝 문제
https://school.programmers.co.kr/learn/courses/30/lessons/68644
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
[설명]
정수 배열 numbers에서 서로 다른 인덱스에 있는 2개의 수를 뽑아 더해 만들 수 있느 모든 수를 배열에 오름차순으로 담아 반환
[접근 방법]
numbers의 최대 데이터 개수가 100이므로 시간 복잡도 고려하지 않아도 됨.
1. 배열에서 두 수를 선택하는 모든 경우의 수 구하기
2. 1에서 구한 수를 새로운 배열에 저장하고 중복값을 제거
3. 배열을 오름차순으로 정렬하고 반환
🔑 풀이
import java.util.*;
class Solution {
public int[] solution(int[] numbers) {
HashSet<Integer> set = new HashSet(); // 중복값 제거
for(int i = 0; i < numbers.length - 1; i++) {
for(int j = i + 1; j < numbers.length; j++) {
set.add(numbers[i] + numbers[j]);
}
}
return set.stream().sorted().mapToInt(Integer::intValue).toArray();
}
}
주어진 Java 코드에서 마지막 return 문은 다음과 같은 작업을 수행한다.
set.stream(): HashSet인 set의 요소들을 스트림으로 변환합니다. 스트림은 데이터의 연속적인 흐름을 처리할 수 있는 API이다.
.sorted(): 스트림의 요소들을 오름차순으로 정렬한다. 이 단계에서 set에 저장된 모든 합계가 정렬된 순서로 나열된다.
.mapToInt(Integer::intValue): 정렬된 스트림의 각 요소를 Integer 객체에서 기본형 int로 변환한다. 이 메서드는 각 Integer 객체를 int로 매핑하여 IntStream을 생성한다.
.toArray(): 최종적으로 IntStream을 배열로 변환한다. 이 메서드는 스트림의 모든 요소를 포함하는 int 배열을 반환한다.
결과적으로, 이 return 문은 numbers 배열의 모든 두 수의 합을 계산하여 중복을 제거한 후, 그 합들을 오름차순으로 정렬한 int 배열을 반환한다.
최종 시간 복잡도 : O(N^2log(N^2))
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!