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

KIMYEONGJUN·2026년 6월 12일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

정수 n과 정수 3개가 담긴 리스트 slicer 그리고 정수 여러 개가 담긴 리스트 num_list가 주어집니다.
slicer에 담긴 정수를 차례대로 a, b, c라고 할 때, n에 따라 다음과 같이 num_list를 슬라이싱 하려고 합니다.
n = 1 : num_list의 0번 인덱스부터 b번 인덱스까지
n = 2 : num_list의 a번 인덱스부터 마지막 인덱스까지
n = 3 : num_list의 a번 인덱스부터 b번 인덱스까지
n = 4 : num_list의 a번 인덱스부터 b번 인덱스까지 c 간격으로
올바르게 슬라이싱한 리스트를 return하도록 solution 함수를 완성해주세요.

내가 이 문제를 보고 생각해본 부분

첫 번째는 n = 3으로, slicer 배열이 {1, 5, 2}이고, num_list는 1부터 9까지 정수 리스트다.
두 번째는 n = 4에 같은 slicer와 num_list를 사용한다.
각 테스트 케이스에 대해 solution 메서드를 호출하며, 결과를 배열 포맷으로 출력한다.
solution 메서드는 입력된 n과 slicer 배열(a, b, c 값), 그리고 num_list를 활용하여 n의 값에 따라 다음 네 가지 경우로 분기해 리스트를 적절히 자른 배열을 만든다.
n == 1인 경우: num_list의 0번 인덱스부터 b번 인덱스까지 부분 배열을 잘라서 반환한다. 인덱스 범위를 맞추기 위해 b + 1까지 잘랐다.
n == 2인 경우: a번 인덱스부터 리스트 끝까지 잘라 반환한다.
n == 3인 경우: a번 인덱스부터 b번 인덱스까지 부분 배열을 잘라 반환한다.
n == 4인 경우: a번부터 b번 인덱스까지 c 간격으로 건너뛰며 값을 새 리스트에 담고, 그 리스트를 다시 배열로 만들어 반환한다.
각 상황에 맞게 Arrays.copyOfRange 메서드를 사용해 연속된 구간을 자르고, n == 4일 땐 직접 for문으로 간격 간 추출하는 방식을 사용하였다.
마지막으로 각 경우에 맞는 배열을 리턴하여 결과 값으로 출력한다.

코드로 구현

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

        switch (n) {
            case 1:
                answer = java.util.Arrays.copyOfRange(num_list, 0, b + 1);
                break;
            case 2:
                answer = java.util.Arrays.copyOfRange(num_list, a, num_list.length);
                break;
            case 3:
                answer = java.util.Arrays.copyOfRange(num_list, a, b + 1);
                break;
            case 4:
                java.util.List<Integer> tempList = new java.util.ArrayList<>();
                for (int i = a; i <= b; i += c) {
                    tempList.add(num_list[i]);
                }
                answer = new int[tempList.size()];
                for (int i = 0; i < tempList.size(); i++) {
                    answer[i] = tempList.get(i);
                }
                break;
            default:
                answer = new int[0];
        }
        return answer;
    }
}

프로그래머스 코드

package programmers;

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

// 프로그래머스 리스트 자르기
public class Main48 {
    public static void main(String[] args) {
        // 첫 번째 예시
        int n1 = 3;
        int[] slicer1 = {1, 5, 2};
        int[] num_list1 = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        int[] result1 = solution(n1, slicer1, num_list1);
        System.out.println(Arrays.toString(result1));  // [2, 3, 4, 5, 6]

        // 두 번째 예시
        int n2 = 4;
        int[] slicer2 = {1, 5, 2};
        int[] num_list2 = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        int[] result2 = solution(n2, slicer2, num_list2);
        System.out.println(Arrays.toString(result2));  // [2, 4, 6]
    }

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

        switch (n) {
            case 1:
                answer = Arrays.copyOfRange(num_list, 0, b + 1);
                break;
            case 2:
                answer = Arrays.copyOfRange(num_list, a, num_list.length);
                break;
            case 3:
                answer = Arrays.copyOfRange(num_list, a, b + 1);
                break;
            case 4:
                List<Integer> tempList = new ArrayList<>();
                for (int i = a; i <= b; i += c) {
                    tempList.add(num_list[i]);
                }
                answer = new int[tempList.size()];
                for (int i = 0; i < tempList.size(); i++) {
                    answer[i] = tempList.get(i);
                }
                break;
            default:
                answer = new int[0];
        }
        return answer;
    }
}

위에 있는 코드를 변경한 코드

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글