정수 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
n | slicer | num_list | result |
---|---|---|---|
3 | [1, 5, 2] | [1, 2, 3, 4, 5, 6, 7, 8, 9] | [2, 3, 4, 5, 6] |
4 | [1, 5, 2] | [1, 2, 3, 4, 5, 6, 7, 8, 9] | [2, 4, 6] |
입출력 예 설명
입출력 예 #1
[1, 2, 3, 4, 5, 6, 7, 8, 9]에서 1번 인덱스부터 5번 인덱스까지 자른 리스트는 [2, 3, 4, 5, 6]입니다.입출력 예 #2
[1, 2, 3, 4, 5, 6, 7, 8, 9]에서 1번 인덱스부터 5번 인덱스까지 2개 간격으로 자른 리스트는 [2, 4, 6]입니다.
function solution(n, slicer, num_list) {
let [a,b,c] = slicer;
if(n === 1){
return num_list.slice(0, b + 1)
}
if(n === 2){
return num_list.slice(a)
}
if(n === 3){
return num_list.slice(a, b + 1)
}
if(n === 4){
return num_list.slice(a, b + 1).filter((_, idx) => idx % c === 0)
}
}
문제는 간단했지만 마지막 n이 4인 경우의 반환 값이 어렵지 않았을까 싶다.
a와 b index만큼 잘라주고 filter 메소드를 통해 idx % c의 나머지가 0인 값만 반환한다.
이번 문제는 간단했지만 이렇게 블로그에 게시하는 이유는
여러 사람들의 풀이를 보고 if문 말고도 switch문으로 작성하면 간결하게 정리할 수 있기 때문이다.
function solution(n, slicer, num_list) {
let [a,b,c] = slicer;
switch(n){
case 1 : return num_list.slice(0, b + 1)
case 2 : return num_list.slice(a)
case 3 : return num_list.slice(a, b + 1)
case 4 : return num_list.slice(a, b + 1).filter((_, idx) => idx % c === 0)
}
}
switch문으로 작성하니 보기도 깔끔해 졌고 간결해 졌다.
switch매개 변수에 전달되는 값에 따라 값을 다르게 처리한다.
조건문 중 if문도 존재하지만 해단 문제 처럼 간단할 경우
switch문을 사용해도 좋다 생각했다.
만약 조건에 충족하는 값이 없을 경우
default값을 마지막에 작성해 주면 된다.
이분이 switch에 대해 이해하기 쉽게 작성해 주신 것 같다.
Switch 조건문 사용하기 - byDico님
const slices = {
1: (num_list, [a, b, c]) => num_list.slice(0, b + 1),
2: (num_list, [a, b, c]) => num_list.slice(a),
3: (num_list, [a, b, c]) => num_list.slice(a, b + 1),
4: (num_list, [a, b, c]) => num_list.slice(a, b + 1).filter((_, i) => i % c === 0),
};
function solution(n, slicer, num_list) {
return slices[n](num_list, slicer);
}
객체 형식으로 정리하신 후 반환하셨다.
객체 요소는 함수 넣을 수 있는 점을 이용하신 것 같다.
다음에 비슷한 문제가 나온다면 시도해 봐야겠다.
다른 분들은 나와 같이 if문이나 switch문을 사용하여 비슷하게 푸셔서
가지고 오지 않았다.