리스트 자르기

nacSeo (낙서)·2024년 2월 14일
0

프로그래머스

목록 보기
71/169

문제 설명

정수 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 은 1, 2, 3, 4 중 하나입니다.
slicer의 길이 = 3
slicer에 담긴 정수를 차례대로 a, b, c라고 할 때
0 ≤ a ≤ b ≤ num_list의 길이 - 1
1 ≤ c ≤ 3
5 ≤ num_list의 길이 ≤ 30
0 ≤ num_list의 원소 ≤ 100

나의 코드

import java.util.*;

class Solution {
    public int[] solution(int n, int[] slicer, int[] num_list) {
        List<Integer> list = new ArrayList<>();
        if(n==1) {
            for(int i=0; i<=slicer[1]; i++) {
                list.add(num_list[i]);
            }
        } else if(n==2) {
            for(int j=slicer[0]; j<num_list.length; j++) {
                list.add(num_list[j]);
            }
        } else if(n==3) {
            for(int k=slicer[0]; k<=slicer[1]; k++) {
                list.add(num_list[k]);
            }
        } else if(n==4) {
            for(int x=slicer[0]; x<=slicer[1]; x+=slicer[2]) {
                list.add(num_list[x]);
            }
        }
        int[] answer = new int[list.size()];
        for(int y=0; y<list.size(); y++) {
            answer[y] = list.get(y);
        }
        return answer;
    }
}

다른 사람 코드

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;
    }
}

삼항연산자 사용

느낀 점

처음 for문 범위를 정할 때 num_list[slice[n]] 이런 식으로 정해버려서 몇 번이고 결과값이 달랐다.. 문제를 다시 읽고 이해하며 수정하여 통과하였다. 코드를 짜고 보니 switch case문을 사용해서도 풀 수 있을 것 같다. 다른 사람 코드처럼 삼항연산자를 사용하는 것 또한 깔끔하고 가독성 좋은 코드인 것 같다.

profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글