[JS] 리스트 자르기 programmers switch

0

코딩테스트

목록 보기
76/80
post-thumbnail

🎀 문제

정수 n과 정수 3개가 담긴 리스트 slicer 그리고 정수 여러 개가 담긴 리스트 num_list가 주어집니다. slicer에 담긴 정수를 차례대로 a, b, c라고 할 때, n에 따라 다음과 같이 num_list를 슬라이싱 하려고 합니다.

  • n = 1 : num_list0번 인덱스부터 b번 인덱스까지
  • n = 2 : num_lista번 인덱스부터 마지막 인덱스까지
  • n = 3 : num_lista번 인덱스부터 b번 인덱스까지
  • n = 4 : num_lista번 인덱스부터 b번 인덱스까지 c 간격으로

올바르게 슬라이싱한 리스트를 return하도록 solution 함수를 완성해주세요.

function solution(n, slicer, num_list) {
    var answer = [];
    return answer;
}

🎀 내 답변

function solution(n, slicer, num_list) {
    if (n == 1) {
        return num_list.slice(0, slicer[1]+1);
    } else if (n == 2) {
        return num_list.slice(slicer[0], num_list.length);
    } else if (n == 3) {
        return num_list.slice(slicer[0], slicer[1] + 1);
    } else if (n == 4) {
        const calc = num_list.slice(slicer[0], slicer[1] + 1);
        return calc.filter((item, i) => i % slicer[2] === 0);
    }
}

solution(4, [1, 5, 2], [1, 2, 3, 4, 5, 6, 7, 8, 9]);
solution(3, [1, 5, 2], [1, 2, 3, 4, 5, 6, 7, 8, 9]);

if문 지옥에서 아직 벗어나지 못한 나다,,,

🎀 더 나은 답변

function solution(n, slicer, num_list) {
    const [a, b, c] = slicer
    let result
    switch(n) {
        case 1: {
            result = num_list.slice(0, b+1)
            break
        }
        case 2: {
            result = num_list.slice(a, num_list.length)
            break
        }
        case 3: {
            result = num_list.slice(a, b+1)
            break
        }
        case 4: {
            const curStr = num_list.slice(a, b+1)
            result = curStr.filter((_, i) => i%c === 0 )
            break
        }
        default: {
            break
        }
    }
    
    return result
}
  • 구조 분해 할당으로 slicer에 들어있는 각각의 값에 a,b,c, 변수를 달아준다.
  • switch 문을 활용해서 더 깔끔하고 이해하기 쉬운 코드가 되었다.

한수 배워갑니다.

profile
일단 해. 그리고 잘 되면 잘 된 거, 잘 못되면 그냥 해본 거!

0개의 댓글