문제 설명
정수 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
문을 사용해서도 풀 수 있을 것 같다. 다른 사람 코드처럼 삼항연산자
를 사용하는 것 또한 깔끔하고 가독성 좋은 코드인 것 같다.