정수 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의 값에 따라 슬라이싱 된 문자열의 개수가 달라지기 때문에 값을 넣기 용이하도록 ArrayList의 add() 메서드를 사용했다. 그 다음은 반환형인 정수형 배열로 만들어 주고, 삼항 연산자를 사용해 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;
}
}
