[알고리즘문제풀기] 배열의 원소만큼 추가하기

silver's avatar
Feb 23, 2025
[알고리즘문제풀기] 배열의 원소만큼 추가하기

문제

내가 작성한 정답

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

silver