문제
내가 작성한 정답
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
List<Integer> list = new ArrayList<>();
for(int a : arr){
for(int i=0; i < a; i++){
list.add(a);
}
}
int[] answer = new int[list.size()];
for(int i = 0; i< answer.length; i++){
answer[i] = list.get(i);
}
return answer;
}
}
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
List<Integer> list = new ArrayList<>();
for(int a : arr){
for(int i=0; i < a; i++){
list.add(a);
}
}
return list.stream()
.mapToInt(i -> i)
.toArray();
}
}
다른 사람들의 정답
class Solution {
public int[] solution(int[] arr) {
int[] answer = {};
int sum = 0;
for(int i=0; i<arr.length; i++) {
sum += arr[i];
}
answer = new int[sum];
int idx = 0;
for(int i=0; i<arr.length; i++) {
for(int j=0; j<arr[i]; j++) {
answer[idx++] = arr[i];
}
}
return answer;
}
}
import java.util.*;
import java.util.stream.Collectors;
class Solution {
public List<Integer> solution(int[] arr) {
return Arrays.stream(arr) // (1) 배열을 Stream<Integer>로 변환
.boxed() // (2) int형 스트림을 Integer 스트림으로 변환 (int -> Integer)
.flatMap(num -> Collections.nCopies(num, num).stream())
// (3) 각 숫자를 해당 숫자만큼 복사한 리스트를 생성하고, 스트림으로 변환
// 예) num = 3 -> [3, 3, 3]
// 예) num = 2 -> [2, 2]
// 위처럼 만들어진 여러 리스트들을 하나의 스트림으로 평탄화(flatten)하여 합침
.collect(Collectors.toList()); // (4) 결과를 List<Integer>로 변환하여 반환
}
}
flatMap(Function<T, Stream<R>> mapper)
: flatMap을 사용하면 중첩된 리스트가 평평하게(flat) 되어 하나의 리스트로 변환됨
- 스트림 내부 요소를 변환하고, 평탄화(flattening)하여 하나의 스트림으로 병합하는 역할을 함.
- 즉, 다차원 구조를 1차원으로 변환하는 데 사용됨.
- 리스트 안에 리스트가 있을 때 중첩 구조를 제거할 때 유용함.
Collections.nCopies(int n, T o)
• Collections.nCopies(n, o)는 주어진 객체 o를 n번 반복하여 리스트로 반환함.
• 단, 반환된 리스트는 불변(immutable) 리스트이므로 수정할 수 없음.
Share article