function getAllElementsButNth(arr, n) {
let result = [];
for (let i = 0; i < arr.length; i++) {
if (i !== n) {
result.push(arr[i]);
}
}
return result;
}
23번 문제 (세 가지 방법)
function getAllElementsButNth(arr, n) {
// slice를 이용하는 방법
// let head = arr.slice(0, n)
// let tail = arr.slice(n + 1, arr.length)
// return head.concat(tail)
// 반복문을 이용하는 방법
// let result = [];
// for (let i = 0; i < arr.length; i++) {
// if (i !== n) {
// result.push(arr[i])
// }
// }
// return result;
// splice를 사용하는 방법
// arr.splice(n, 1)
// return arr;
}
function createPhoneNumber(arr) {
let head = '(010)';
const len = arr.length;
const body = arr.slice(len - 8, len - 4).join('');
const tail = arr.slice(len - 4, len).join('');
if (len === 11) {
head = `(${arr.slice(0, 3).join('')})`;
}
return `${head}${body}-${tail}`;
}
리팩토링 전
function createPhoneNumber(arr) {
// 입력 : [0, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8]
// 출력 : '(010)1234-5678'
// "(0번째 요소 ~ 2번째요소)" + "3번째 요소 ~ 6번째 요소" + "-" + "7번째 요소 ~ 10번째 요소"
// `${(arr[0]~arr[2]}${arr[3]~arr[6]}-${arr[7]~arr[11]}`
// first, second, third라는 변수를 선언하고, 각각 할당한다.
// slice()메서드로 배열의 일부를 복사 한 후 join()메서드로 문자열로 변경한다.
let first = arr.slice(0, 3).join('');
let second = arr.slice(3, 7).join('');
let third = arr.slice(7).join('');
// 2. 주어진 배열의 길이가 8인 경우
if (arr.length === 8) {
first = '010';
second = arr.slice(0, 4).join('');
third = arr.slice(4).join('');
}
// 1. 템플릿 리터럴에 각각의 변수를 넣어 리턴한다. -> 길이가 8인 경우를 위해 분기 필요
return `(${first})${second}-${third}`;
}
리팩토링 후
// 리팩토링
function createPhoneNumber(arr) {
// 길이가 11일 때와 8일 때 second와 third를 각각 재할당해야 하는 이유는
// slice() 메서드를 사용할 때 앞에서부터 복사했기 때문이다.
// arr.length를 기준으로 뒤에서 부터 복사하기
let first = arr.slice(0, 3).join('');
let second = arr.slice(arr.length - 8, arr.length - 4).join('');
let third = arr.slice(arr.length - 4).join('');
// 2. 주어진 배열의 길이가 8인 경우
if (arr.length === 8) {
first = '010';
// 이 경우 second와 third의 재할당이 필요 없다.
}
return `(${first})${second}-${third}`;
// 추가 리팩토링: 가독성을 떨어 뜨리는 반복적으로 사용되는 코드를 하나의 변수에 할당할 수 있다.
}
function fibonacci(num) {
let fibNum = [];
for (let i = 0; i <= num; i++) {
if (i === 0) {
fibNum.push(0);
} else if (i === 1) {
fibNum.push(1);
} else {
fibNum.push(fibNum[i - 2] + fibNum[i - 1]);
}
}
return fibNum;
}
function fibonacci(num) {
// 피보나치를 한 마디로?
// 다음 수 = 맨 끝에 있는 수 + 그 앞에 있는 수
// 1. 피보나치 수열을 넣어줄 배열을 만든다.
let fib = [];
// 2. 반복문을 돌린다. -> 0부터 num까지 반복
// 0과 1은 피보나치수열의 기본세팅
// i가 0일 때, 1일 때는 바로 배열에 push한다.
for (let i = 0; i <= num; i++) {
if (i === 0 || i === 1) {
fib.push(i) // [0, 1]
} else {
// 3. 다음 수 = 맨 끝에 있는 수 + 그 앞에 있는 수
// 반복문의 현재 시점: i = 2, fib = [0, 1]
// 2번째 요소를 구하기 위해 1번째 요소와 0번째 요소를 더한다. -> fib[2] = fib[1] + fib[0]
// 다음 반복
// i = 3, fib = [0, 1, 1]..
// fib[3] = fib[2] + fib[1]...
// 그 다음 반복...
// i = 4, fib = [0, 1, 1, 2]..
// fib[4] = fib[3] + fib[2]...
// 이 과정을 i를 이용하여 표현해 보자.
// fib[i] = fib[i - 1] + fib[i - 2] -> 이렇게 해도 답이 나온다.
fib.push(fib[i - 2] + fib[i - 1]);
}
}
// 4. 반복이 끝난 후 fib를 리턴
return fib;
}
728x90
'FE > 코딩테스트' 카테고리의 다른 글
[JS] 고차함수 - 하 (0) | 2023.03.14 |
---|---|
[코플릿/JS] 객체 문제 - 하 (0) | 2023.02.28 |
[코플릿/JS] 배열 문제 - 하 (0) | 2023.02.27 |
8. 코플릿_자바스크립트) 반복문 _ 가장 큰 수 리턴하기 🤍 (0) | 2023.02.25 |
8. 코플릿_자바스크립트) 반복문 _ 부분적으로 완성된 문자열을 전부 이어붙인 문자열 리턴하기 🤍 (0) | 2023.02.25 |