1. 리스트 자르기
[문제 설명]
정수 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
[답변]
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:
let answer = [];
for (let i = a; i < b + 1; i+=c) {
answer.push(num_list[i]);
}
return answer;
}
}
💡 switch case문을 사용해 풀었다.
[다른 답변]
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));
}
}
💡 case 4의 경우 filter를 사용하여 풀어도 됐다. 머리에 넣자
2. 첫 번째로 나오는 음수
[문제 설명]
정수 리스트 num_list가 주어질 때, 첫 번째로 나오는 음수의 인덱스를 return하도록 solution 함수를 완성해주세요. 음수가 없다면 -1을 return합니다.
[답변]
function solution(num_list) {
return num_list.findIndex((i) => i < 0);
}
💡 findIndex()를 활용해 풀었다. 메서드는 짱이야
3. 배열 만들기 3
[문제 설명]
정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어집니다.
intervals는 항상 [[a1, b1], [a2, b2]]의 꼴로 주어지며 각 구간은 닫힌 구간입니다. 닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다.
이때 배열 arr의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요.
[답변]
function solution(arr, intervals) {
const [a, b] = intervals;
const arr1 = arr.slice(a[0], a[1] + 1);
const arr2 = arr.slice(b[0], b[1] + 1);
return [...arr1, ...arr2];
}
💡 구조분해할당, slice, 전개연산자를 활용해 풀어보았다. 그런데 생각해보니 구조분해할당을 다르게 하면 더 깔끔하게 풀 수 있을 것 같았다.
[답변 2]
function solution(arr, intervals) {
const [[a, b], [c, d]] = intervals;
return [...arr.slice(a, b + 1), ...arr.slice(c, d + 1)];
}
💡 변수를 만들지 않아도 되고, 이게 더 깔끔한 것 같다!
4. 2의 영역
[문제 설명]
정수 배열 arr가 주어집니다. 배열 안의 2가 모두 포함된 가장 작은 연속된 부분 배열을 return 하는 solution 함수를 완성해 주세요.
단, arr에 2가 없는 경우 [-1]을 return 합니다.
[답변]
function solution(arr) {
let idx = [];
arr.forEach((v, i) => {
v === 2 && idx.push(i);
});
return !idx.length ? [-1] : arr.slice(idx[0], idx[idx.length-1] + 1);
}
💡 forEach로 arr 배열을 순회하며 값이 2인 녀석들의 index를 idx 배열에 삽입했다. 배열이 비어있으면 [-1]을 반환하고, 값이 있으면 arr의 idx[0]부터 idx[idx.length-1] + 1 까지의 요소들을 slice() 해서 반환했다.
역시나 이런 상황에서도 사용할 수 있는 메서드가 있었다!
[다른 답변]
function solution(arr) {
const from = arr.indexOf(2);
const end = arr.lastIndexOf(2);
return from === -1 ? [-1] : arr.slice(from, end+1);
}
📌 lastIndexOf(searchValue, fromIndex)
: 주어진 요소를 뒤에서부터 검색하여 해당 요소의 마지막 인덱스를 찾음. 없으면 -1 반환
5. 배열 조각하기
[문제 설명]
정수 배열 arr와 query가 주어집니다.
query를 순회하면서 다음 작업을 반복합니다.
- 짝수 인덱스에서는 arr에서 query[i]번 인덱스를 제외하고 배열의 query[i]번 인덱스 뒷부분을 잘라서 버립니다.
- 홀수 인덱스에서는 arr에서 query[i]번 인덱스는 제외하고 배열의 query[i]번 인덱스 앞부분을 잘라서 버립니다.
위 작업을 마친 후 남은 arr의 부분 배열을 return 하는 solution 함수를 완성해 주세요.
[답변]
function solution(arr, query) {
query.forEach((v, i) => {
i % 2 === 0 ? arr.splice(query[i] + 1) : arr.splice(0, query[i])
});
return arr;
}
💡 문제를 제대로 안읽고 query의 값을 홀수 / 짝수 판별해서, 테스트는 통과되는데 채점 시 전부 틀리는 것이다....!
문제를 다시 한 번 읽어보니 인덱스가 홀 / 짝 인지 확인해야 했었다. 문제를 꼼꼼히 읽는 습관을 들이자 🤦♀️
첫 10점... 😎
'프로그래머스 > Lv. 0 코딩 기초 트레이닝' 카테고리의 다른 글
[프로그래머스] 코딩 기초 트레이닝 Day 14 / JS (0) | 2023.08.02 |
---|---|
[프로그래머스] 코딩 기초 트레이닝 Day 13 / JS (0) | 2023.08.01 |
[프로그래머스] 코딩 기초 트레이닝 Day 11 / JS (0) | 2023.07.30 |
[프로그래머스] 코딩 기초 트레이닝 Day 10 / JS (0) | 2023.07.29 |
[프로그래머스] 코딩 기초 트레이닝 Day 9 / JS (0) | 2023.07.28 |