▶구조 분해 할당 & ▶filter & ▶slice 활용한 간단한 문제가 있어 정리해보고자 합니다.
문제설명
정수 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
입출력 예 & 설명
입출력 예 #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]입니다.
나의 풀이
먼저 나눠줄 숫자인 silcer 배열을 구조 분해 할당을 이용하여 a, b, c에 담아줍니다.
그리고 n에 따라서 arr을 다르게 만들어줘야 하기 때문에 switch문을 사용해 줍니다.
n = 1일 경우에는 slice() 함수를 사용하여 0번 인덱스에서 b번 인덱스까지 잘라주었습니다. 이때 slice() 함수는두 번째 인자로 넘어온 값을 포함하지 않기 때문에 b를 포함하기 위해 +1 해줍니다.
n = 2일 경우에는 slice() 함수의 특성 중 하나인 두 번째 인자를 생략하면 첫 번째 인자부터 끝까지 자르게 됩니다.
n = 3일 경우에는 n = 1과 같은 맥락으로 a부터 b까지 잘라줍니다.
마지막으로 n =4일 경우에는 기본 for문을 a부터 b까지 c씩 증감하도록 하여 조건에 맞는 arr의 요소를 answer에 push 하여 마무리해 주었습니다.
다른 풀이
다른 풀이에서는 "나의 풀이"와 거의 동일하지만 case 4에서 filter문을 사용했습니다.
a부터 b까지 silce 한 배열을 filter() 함수를 사용하여 인덱스가 짝수인 값 즉 간격인 2인 true 값만 새로운 배열로 반환해 주었습니다.
'Coding Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 문자 개수 세기 (JavaScript) (1) | 2024.02.13 |
---|---|
[프로그래머스] 조건에 맞게 수열 변환하기 2 (JavaScript) (0) | 2024.02.12 |
[프로그래머스] 문자열 묶기 (JavaScript) (1) | 2024.02.11 |
[프로그래머스] 세 개의 구분자 (JavaScript) (1) | 2024.02.09 |
[프로그래머스] 배열의 길이를 2의 거듭제곱으로 만들기 (JavaScript) (0) | 2024.02.08 |