코딩테스트 JS 기본 문제들을 왜이리 못 푸는가?

2023. 4. 8. 01:01Trip to Cote

처음에는 배열 함수가 엄청 문제로 나와서 강제로 외웠는데 이번에는 문자열 관련 함수 문제들이 나와서 골머리를 앓고 있다. 이 정도로 약한 소리를 하면 안되는데...! 모르니까 문제는 안풀리고 안풀리니까 답답하고 답답하니까 딴길로 새는 루트를 끊어야겠다는 생각이 든다. 이와 더불어 뭐지 하고 넘어 갔던 것을 정리한다. 

 

1) substr 문자열 자르기

string.substr(문자의 시작점 인덱스, 시작점으로 몇 글자 추출 할 것인지)

ex) string의 3번째 문자부터 5 글자 추출해줘 > string.substr(2, 5) * 항상 인덱스를 조심하자!

 

2) splice

 

mdn 문서 曰

 

splice() 메서드는 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경합니다.

 

const months = ['Jan', 'March', 'April', 'June'];


months.splice(1, 0, 'Feb');
// Inserts at index 1
console.log(months);
// Expected output: Array ["Jan", "Feb", "March", "April", "June"]

> 보아하니  첫 번째는 배열의 변경을 시작할 인덱스, 두 번째는 deleteCount로 제거할 요소의 수를 카운트 한다. 고로 0이면 세 번째 매개변수를 추가만 한다. 세 번째 매개변수는 추가할 아이템을 적어준다. 

 

months.splice(4, 1, 'May');
// Replaces 1 element at index 4
console.log(months);
// Expected output: Array ["Jan", "Feb", "March", "April", "May"]

> 주의할 점을 인덱스 카운팅을 잘 할 것, June을 삭제하고 May를 넣었다.

 

2-1) 프로그래머스-인덱스 바꾸기 를 splice 함수를 통해서 풀어보겠다. 

 

이 문제에 난 아래와 같은 해답을 내놨다. 

결과는 오류.... 내 논리는 주어진 문자열을 배열을 만들고 바꿔줄 문자열을 저장해주고 splice로 잘라주고 그 문자열을 삽입하려 했는데 왠걸... 안된다. 프린트해보니 secondList에서 추가하려는 문자열만 나오는데...

한참을 고민하다가 내가 잘못한 점은 splice를하고 원래 배열값을 불러와야하는데 조금 멍청하게 splice된 값 즉 splice의 리턴값을 불러와서 잘려진 값을 secondList에 저장해서 풀었던 것이다... 이런 바보...

 

2-2) 같은 숫자는 싫어

 

이 문제를 splice로 풀려고 했는데 반복문을 두개 쓴 탓인지 효율성 검사에서 탈락했다....

function solution(arr)
{
    for (let i = 0; i < arr.length; i++) {
        while (arr[i] === arr[i + 1]) {
           let del = arr.splice(i + 1, 1)
            console.log(del)
        }
    } return arr
}

답을 보니 filter를 활용하여 손쉽게 해결아 가능하였다. 이 문제는 인접한 두 개의 값에 초점을 맞추는 것까지는 접근했는데 풀이법에서 아쉬웠다.

function solution(arr){
    return arr.filter((val,index) => val != arr[index+1]);
}

 filter는 3개의 인자를 받는다고 한다. value, index, array로 콜백함수에서 사용할 경우 써주면 된다. 사실 몰랐다. 그냥 자연스럽게 val만 쓰고 있었다...

 

3) shift, push

 

shift는 배열에서 0번째 요소를 제거한다.

unshift는 배열에서 0번째 요소로 인자값을 추가한다.

push는 맨 뒤에 추가

 

4) 구조 분해 할당 

 

mdn 문서 曰

 

구조 분해 할당 구문은 배열이나 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 하는 JavaScript 표현식입니다.

 

let a, b, rest;
[a, b] = [10, 20];

console.log(a);
// Expected output: 10

console.log(b);
// Expected output: 20

[a, b, ...rest] = [10, 20, 30, 40, 50];
> 이건 봐도봐도 기억이 안나네 이제 입력 완료...!
console.log(rest);
// Expected output: Array [30, 40, 50]