💡 이 포스트에는 Unit 9. javascript 배열, 객체 - 배열의 코딩문제를 풀고 몰랐던 점이나 부족했던 점을 정리했다!
(누군가에게는 너무 쉬워 하품이 나올 수 있습니다.🥲)
핵심 : 빈 배열을 split(' ')하면(공백 기준) 빈 배열이 아니라 ['']가 반환된다.(빈 문자열)
간단해 보이지만 놓치면 골머리 아픈 발견이었다.
let result=[];
console.log(result.split(' ')); //['']
배열의 메서드가 반환하는 값, mutable 여부를 잘 알아야 문제를 헷갈리지 않고 수월하게 풀 수 있었다.
(array는 임의의 배열)
그리고 메서드별로 리턴하는 값이 다르다.
인자로 어떤 값을 사용하냐에 따라 slice를 다양하게 사용할 수 있다.
//원본 복사하기
let result=arr.slice();
//.slice()가 없을 경우 result를 수정하면 원본 arr도 바뀐다.
result.push(el);
return result;
핵심 : 특정값 전후로 배열을 분리하고, 두 배열을 다시 합친다.
핵심 : .splice()를 사용한다.
방법은 여러 가지가 있으며 상황에 따라 필요한 방법을 사용한다.
1) 배열 분리 후 합치기
let myArr=[1,2,3,4,5];
function removeN(n){
let newArr1=arr.slice(0,n);
let newArr2=arr.slice(n+1);
return newArr1.concat(newArr2);
}
removeN(2); //[1,2,4,5]
2) splice()메서드 사용하기
let myArr = ['red', 'orange', 'yellow', 'green', 'blue'];
let removedEl = myArr.splice(2, 1); //['yellow']
console.log(myArr); //['red', 'orange', 'green', 'blue']
핵심 : slice()와 join()을 적절히 사용한다.
배열에 있는 값들을 합쳐서 문자로 나타내고,
그 문자들 사이에 임의의 값을 넣어서 만들 경우 slice()와 join()을 알맞게 사용하면된다.
function createIdNum(arr) {
//의사 코드
//빈 문자열 변수를 선언한다.
//arr의 형태는 다음과 같다 : [9,0,0,1,0,1,1,2,3,4,5,6,7]
//arr의 앞자리 6개(0~5번째)를 하나로 합치고 (birth)
//arr의 뒷자리 7개(6~마지막)를 하나로 합쳐서 (serial)
//중간에 '-'를 넣어 하나의 문자열로 만든다.
let result='';
let birth=arr.slice(0,6).join('');
let serial=arr.slice(6).join('');
//slice()는 두번째 인자를 생략하면 마지막까지 가져온다.
result=`${birth}-${serial}`;
return result; //'900101-1234567'
}
핵심 :
피보나치 수열은 0,1로 시작하여 다음 항은 이전항들의 합으로 이뤄진다.
수열의 n번째 숫자와 배열의 n번째 숫자의 값을 혼동하지 말아야 한다.
피보나치 수열은 알고리즘 테스트의 단골 손님이라고 한다.
피보나치 수열은 반복문, 고차함수, 재귀 함수 등 여러 가지 방법으로 풀 수 있다.
이번에는 반복문을 활용해 피보나치 수열을 배열로 반환하는 방법을 사용한다.
그 전에 피보나치 수열의 정의와 규칙을 알아야 하며, 다음과 같다.
이 원리를 활용해 피보나치 수열을 배열로 리턴한다. 다만
function makeFibonacci(num) {
//의사코드
//num 수만큼 피보나치 배열을 리턴한다.
//피보나치 '배열'의 0번째는 0, 1번째는 1이다. (고정)
//2번째는 0번째 값+1번째 값, 3번째는 1번째 값+2번째 값, ....
//n번째는 n-2번째 값+n-1번째 값의 합이다.
//num수만큼 리턴하려면 배열의 마지막 인덱스는 num-1이 되어야 한다.
//빈 배열을 선언하고, 2번째부터는 피보나치 수열을 반복문으로 생성하여 추가한다.
let arr=[];
if(num>=0) arr.push(0);
if(num>=1) arr.push(1);
if(num>=2){
for(let n=2; n<num; n++){
arr.push(arr[n-2]+arr[n-1]);
}
}
return arr;
}
이번 배열 코딩문제를 풀면서 지난번보다는 덜 어려움을 느꼈다.
아마 저번 코딩노트에 부족한 점을 기록하고, 그 점을 보완하기 위한 공부법을 적었놓았고, 이를 실천했기 때문이 아닐까 한다.
저번보다는 나아져서 스스로의 힘으로 문제는 다 통과했으나, 아래의 부족한 점이 있었다.
오늘은 위의 부족한 점을 보완하기 위해 아래와 같이 공부했다!
의사코드는 꾸준히 잘 작성하고 있다.
이번에도 의사코드 작성의 덕을 톡톡히 보았다.
특히 수학개념이 나오면 잘 검색하여 그 특징을 잘 정리해두어야 겠다.
고등학생 때도 못했던 수포자 탈출을 이렇게나마 하게 되는구나!
오늘도 좋은 공부였다. 파사삭...