안녕하세요.
49회차 과제 "두 개 뽑아서 더하기"입니다.
문제 설명
정수 배열 numbers가 주어집니다.
numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
제한 사항
numbers의 길이는 2 이상 100 이하입니다.
numbers의 모든 수는 0 이상 100 이하입니다.
풀이
나의 풀이
import java.util.*;
class Solution {
public int[] solution(int[] numbers) {
HashSet<Integer> set = new HashSet<>();
for (int i = 0; i < numbers.length; i++) {
for (int j = 0; j < numbers.length; j++) {
if(i==j){continue;}
set.add(numbers[i] + numbers[j]);
}
}
int[] answer = new int[set.size()];
int cnt = 0;
for(int i : set){
answer[cnt++] = i;
}
Arrays.sort(answer);
}
다른 사람의 풀이
import java.util.HashSet;
import java.util.Set;
class Solution {
public int[] solution(int[] numbers) {
Set<Integer> set = new HashSet<>();
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().sorted().mapToInt(Integer::intValue).toArray();
}
}
포인트
-. HashSet은 중복된 값을 허용하지 않기 때문에 이번처럼 중복된 값을 제외하는 형태의 문제에 적합합니다.
-. set.stream().sorted().mapToInt(Integer::intValue).toArray()
* .stream() : 컬렉션의 요소를 처리할 수 있는 스트림을 생성합니다.
* .sorted() : 스트림의 요소를 오름차순 정렬합니다.
* .mapToInt(Integer::intValue) : 스트림의 요소를 int 타입의 원시 타입으로 맵핑하여 스트림은 IntStream으로 변환됩니다.
* .toArray() : IntStream의 모든 요소를 int[] 배열로 변환합니다.
저처럼 처음해보시는 분들에게 이 글이 조금이나마 도움이 되었으면 좋겠습니다.
'내일배움캠프 > Daily Routine (알고리즘)' 카테고리의 다른 글
[내일배움캠프] 알고리즘 Daily Routine 51. 푸드 파이트 대회 (0) | 2024.10.16 |
---|---|
[내일배움캠프] 알고리즘 Daily Routine 50. 가장 가까운 같은 글자 (2) | 2024.10.15 |
[내일배움캠프] 알고리즘 Daily Routine 48. K번째수 (0) | 2024.10.11 |
[내일배움캠프] 알고리즘 Daily Routine 47. 문자열 내 마음대로 정렬하기 (0) | 2024.10.10 |
[내일배움캠프] 알고리즘 Daily Routine 46. 숫자 문자열과 영단어 (1) | 2024.10.08 |
댓글