[프로그래머스] 리스트 자르기

Seah Lee·2023년 7월 5일
0

프로그래머스

목록 보기
57/57

import java.util.ArrayList;
import java.util.List;

class Solution {
    public int[] solution(int n, int[] slicer, int[] num_list) {
        int a = slicer[0];
        int b = slicer[1];
        int c = slicer[2];

        List<Integer> result = new ArrayList<>();

        switch (n) {
            case 1:
                for (int i = 0; i <= b; i++) {
                    result.add(num_list[i]);
                }
                break;
            case 2:
                for (int i = a; i < num_list.length; i++) {
                    result.add(num_list[i]);
                }
                break;
            case 3:
                for (int i = a; i <= b; i++) {
                    result.add(num_list[i]);
                }
                break;
            case 4:
                for (int i = a; i <= b; i += c) {
                    result.add(num_list[i]);
                }
                break;
        }

        return result.stream().mapToInt(Integer::intValue).toArray();
    }
}

case-switch 문 써봤다 ~

  1. result.stream()은 result 리스트를 스트림으로 변환합니다. 스트림은 요소들의 연속된 시퀀스로 다양한 작업을 수행할 수 있게 해줍니다.
  2. mapToInt(Integer::intValue)는 각각의 요소에 대해 Integer 객체를 int로 변환합니다. intValue()는 Integer 객체의 정수 값을 반환하는 메서드입니다.
  3. toArray()는 스트림의 요소들을 배열로 변환합니다. toArray() 메서드는 배열을 반환하므로, 최종적으로 int[] 형태의 결과를 얻을 수 있습니다.
 // 방법 1
    int[] arr1 = new int[list.size()]
    for (int i = 0 ; i < list.size() ; i++) 
        arr1[i] = list.get(i).intValue();
    
    // 방법 2
    int[] arr2 = list.stream()
                .mapToInt(i -> i)
                .toArray();
    
    // 방법 3
    int[] arr3 = list.stream()
                .mapToInt(Integer::intValue)
                .toArray();

    // 방법 4
    int[] arr4 = list.stream()
                .filter(i -> i != null)
                .mapToInt(i -> i)
                .toArray();

이렇게해서 list에 integer 값을 int[] 값으로 변경할 수 있다.
stream API에 대해 공부를 해야할듯

[다른 사람의 풀이]

import java.util.*;
import java.util.stream.IntStream;

class Solution {
    public int[] solution(int n, int[] slicer, int[] numList) {
        return IntStream.iterate(n == 1 ? 0 : slicer[0], i -> i <= (n == 2 ? numList.length - 1 : slicer[1]), i -> n == 4 ? i + slicer[2] : i + 1).map(i -> numList[i]).toArray();
    }
}

한줄좌 껀데 IntStream 사용하심

class Solution {
    public int[] solution(int n, int[] slicer, int[] num_list) {
        int start = n == 1 ? 0 : slicer[0];
        int end = n == 2 ? num_list.length - 1 : slicer[1];
        int step = n == 4 ? slicer[2] : 1;
        int[] answer = new int[(end - start + step) / step];
        for (int i = start, j = 0; i <= end; i += step) {
            answer[j++] = num_list[i];
        }
        return answer;
    }
}

이렇게하면 배열로만 처리할 수 있구나..!

profile
성장하는 개발자

0개의 댓글