[프로그래머스/Java] Lv.0 리스트 자르기

febCho·2024년 3월 9일
0

코딩테스트

목록 보기
56/253
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 은 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

풀이

배열의 값을 원하는 인덱스 범위에 맞게 자르기 위해 Arrays.copyOfRange()를 사용했다. 그리고 인덱스 범위 내 정해진 간격에 따라 배열을 잘라야 하는 n == 4의 경우에는 for문의 증감식을 조정해 주었다.

이때, num_list의 길이가 고정되어 있지 않았고 c의 값에 따라 슬라이싱 된 문자열의 개수가 달라지기 때문에 값을 넣기 용이하도록 ArrayListadd() 메서드를 사용했다. 그 다음은 반환형인 정수형 배열로 만들어 주고, 삼항 연산자를 사용해 return 했다.

처음부터 끝까지 나 혼자 풀어서 받은 점수 중 가장 큰 점수를 받아서 기뻤다. 기째기째!

import java.util.*;

class Solution {
    public int[] solution(int n, int[] slicer, int[] num_list) {
        List<Integer> temp = new ArrayList<>();
        int[] copyOfNum_list = {};
        
        int a = slicer[0];
        int b = slicer[1];
        int c = slicer[2];

        if(n == 1){
            copyOfNum_list = Arrays.copyOfRange(num_list, 0, b + 1);
        }else if(n == 2){
            copyOfNum_list = Arrays.copyOfRange(num_list, a, num_list.length);
        }else if(n == 3){
            copyOfNum_list = Arrays.copyOfRange(num_list, a, b + 1);
        }else{
            for(int i=a;i<=b;i+=c){
                temp.add(num_list[i]);
            }
        }
        
        int[] answer = new int[temp.size()];
        for(int i=0;i<temp.size();i++){
            answer[i] = temp.get(i);
        }
        
        return n == 4 ? answer : copyOfNum_list;
    }
}

결과

profile
Done is better than perfect.

0개의 댓글