[알고리즘문제풀기] 배열 만들기 3

silver's avatar
Mar 31, 2025
[알고리즘문제풀기] 배열 만들기 3

문제

내가 작성한 정답

ArrayList

import java.util.*; class Solution { public int[] solution(int[] arr, int[][] intervals) { ArrayList<Integer> answer = new ArrayList<>(); for(int i=intervals[0][0]; i<=intervals[0][1]; i++){ answer.add(arr[i]); } for(int i=intervals[1][0]; i<=intervals[1][1]; i++){ answer.add(arr[i]); } int[] an = new int[answer.size()]; for(int i =0; i<an.length; i++){ an[i] = answer.get(i); } return an; } }

ArrayList + stream

import java.util.*; class Solution { public int[] solution(int[] arr, int[][] intervals) { ArrayList<Integer> answer = new ArrayList<>(); for(int i=intervals[0][0]; i<=intervals[0][1]; i++){ answer.add(arr[i]); } for(int i=intervals[1][0]; i<=intervals[1][1]; i++){ answer.add(arr[i]); } return answer.stream().mapToInt(i->i).toArray(); } }

IntStream

import java.util.stream.*; class Solution { public int[] solution(int[] arr, int[][] intervals) { return IntStream.concat( IntStream.rangeClosed(intervals[0][0],intervals[0][1]).map(i->arr[i]), IntStream.rangeClosed(intervals[1][0],intervals[1][1]).map(i->arr[i]) ).toArray(); } }

다른 사람들의 정답

Array

class Solution { public int[] solution(int[] arr, int[][] intervals) { int s1 = intervals[0][0], e1 = intervals[0][1], s2 = intervals[1][0], e2 = intervals[1][1], idx = 0; int[] answer = new int[e1 - s1 + e2 - s2 + 2]; for (int i = s1; i <= e1; i++) { answer[idx++] = arr[i]; } for (int i = s2; i <= e2; i++) { answer[idx++] = arr[i]; } return answer; } }

arraycopy(복사할 배열, 처음 , 마지막+1)

import java.util.*; class Solution { public int[] solution(int[] arr, int[][] intervals) { int x1 = intervals[0][0]; int y1 = intervals[0][1]; int x2 = intervals[1][0]; int y2 = intervals[1][1]; int[] answer = new int[(y1-x1+1)+(y2-x2+1)]; // arr의 1부터 answer배열의 0번째 인덱스에 3개 붙여넣는다. => 0, 1, 2 // arr의 0부터 answer배열의 3번째 인덱스에 5개 붙여넣는다. => 3, 4, 5, 6, 7 // - src : 복사하고자 하는 원본 배열 // - srcPos : 원본 배열에서 복사를 시작할 인덱스 // - dest : 복사한 원소를 저장할 대상 배열 // - destPos : 대상 배열에서 복사한 원소를 저장할 시작 위치 // - length : 복사할 원소의 개수 System.arraycopy(arr, x1, answer, 0, y1-x1+1); System.arraycopy(arr, x2, answer, y1-x1+1, y2-x2+1); return answer; } }

stream

import java.util.*; class Solution { public int[] solution(int[] arr, int[][] intervals) { // 1. Arrays.stream(intervals): intervals라는 2차원 배열을 Stream<int[]>로 변환 // 각 요소는 intervals 배열의 한 행(int[])이 된다. // 2. .flatMapToInt(ints -> ...): Stream<int[]>의 각 요소(int[] ints)에 대해 IntStream을 생성하고, // 이렇게 생성된 모든 IntStream을 하나의 IntStream으로 평탄화(flatten)하여 // 2차원 배열의 각 행을 기반으로 생성된 IntStream들을 하나의 긴 IntStream으로 합친다. // 3. Arrays.stream(Arrays.copyOfRange(arr, ints[0], ints[1] + 1)): // - Arrays.copyOfRange(arr, ints[0], ints[1] + 1): arr 배열의 일부를 복사하여 새로운 배열을 생성 // - ints[0]: 복사를 시작할 시작 인덱스 (inclusive). intervals 배열의 각 행의 첫 번째 요소 // - ints[1] + 1: 복사를 끝낼 끝 인덱스 (exclusive). intervals 배열의 각 행의 두 번째 요소에 1을 더한 값 // (ints[1]까지 포함하기 위해 +1 -> exclusive이므로) // - Arrays.stream(...): 복사된 배열을 IntStream으로 변환 // 4. .toArray(): 평탄화된 IntStream의 모든 요소를 int[] 배열로 변환하여 반환 return Arrays.stream(intervals) .flatMapToInt(ints -> Arrays.stream(Arrays.copyOfRange(arr, ints[0], ints[1] + 1))) .toArray(); } }
 
Share article

silver