극동대학교\AI컴퓨터공학과\JAVA/프로그래머스 코딩 기초 트레이닝

[프로그래머스, LV.0] 배열 만들기 3

sundori 2023. 9. 6. 15:18

목차

    #1 배열 만들기 3

    문제 설명

    정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어집니다.

    intervals는 항상 [[a1, b1], [a2, b2]]의 꼴로 주어지며 각 구간은 닫힌 구간입니다. 닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다.

    이때 배열 arr의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요.

    제한사항

    • 1 ≤ arr의 길이 ≤ 100,000
      • 1 ≤ arr의 원소 < 100
    • 1 ≤ a1  b1 < arr의 길이
    • 1 ≤ a2  b2 < arr의 길이

    입출력 예

    arr intervals result
    {1, 2, 3, 4, 5} {{1, 3}, {0, 4}} {2, 3, 4, 1, 2, 3, 4, 5}

    #2 알고리즘 및 코드

    import java.util.ArrayList;
    import java.util.List;
    class Solution {
        public int[] solution(int[] arr, int[][] intervals) {
            List<Integer> list = new ArrayList<>();
            for(int i = 0; i < intervals.length; i++){
                for(int j = intervals[i][0]; j <= intervals[i][1]; j++){
                    list.add(arr[j]);
                }
            }
            return list.stream().mapToInt(i -> i).toArray();
        }
    }
    -----------------------------------------------------
    정확성  테스트
    테스트 1 〉	통과 (2.74ms, 80.5MB)
    테스트 2 〉	통과 (4.37ms, 80.4MB)
    테스트 3 〉	통과 (24.16ms, 88.1MB)
    테스트 4 〉	통과 (10.89ms, 85.8MB)
    테스트 5 〉	통과 (7.63ms, 99.5MB)
    테스트 6 〉	통과 (10.24ms, 97.2MB)
    테스트 7 〉	통과 (8.52ms, 107MB)
    테스트 8 〉	통과 (10.34ms, 107MB)
    테스트 9 〉	통과 (14.38ms, 110MB)
    테스트 10 〉	통과 (5.79ms, 90MB)
    테스트 11 〉	통과 (3.58ms, 73.1MB)
    • List 클래스와 ArrayList 클래스를 사용한다.
      그 이유는 배열의 한계 때문에 만들어진 자료형이기 때문이다.
      배열의 한계란 배열을 사용하기 위해서는 크기를 정해야 하는데 프로그래밍 중에 동적으로 생성해야 하는 경우가 많아서이다.
    • 중첩 for문을 통해 주어지는 intervals의 크기만큼 반복하며 두 번째 for 문에서는 intervals 배열 안의 열림 원소부터 닫힘 연산까지 반복을 진행하여 동적으로 List 클래스를 사용한다.
    • 그 후 다시 배열로 변환하여 반환한다.