코딩응애의 개발블로그

코플릿 문제 풀면서 알게된 것들 - 배열안에 특정 값 제거 본문

코드스테이츠(부트캠프)

코플릿 문제 풀면서 알게된 것들 - 배열안에 특정 값 제거

이너멜 2022. 8. 4. 23:01

removeExtremes 

이 문제 푸는데 시간이 너무 오래걸림 내가 내 방식대로 풀 수 있을것 같은데 라는 생각으로 레퍼런스대로 안풀어서 더 걸리긴 했지만 결국 초기값은 그냥 레퍼런스에 나온대로 설정하고 해서 풀음 짜증남.. 우선 정답 코드 부터 보자면 

function removeExtremes(arr) {
    // TODO: 여기에 코드를 작성합니다.
    let long = 0;
    let short = 20;
    let delLong; 
    let delShort;
    for (let i = 0; i < arr.length; i++) {
        if (long <= arr[i].length) {
            long = arr[i].length;
            delLong = arr[i]
        }
        if (short >= arr[i].length) {
            short = arr[i].length;
            delShort = arr[i]
        }
    }
    delLong = arr.indexOf(delLong)
    arr.splice(delLong, 1)
    delShort = arr.indexOf(delShort)
    arr.splice(delShort, 1)
    return arr;
}

원래는 변수 long, short에 arr[0]으로 초기값을 주고 했는데 도저히 하나가 통과가 안돼서 그냥 저렇게 초기값을 주었다

그러니 바로 됨 ㅋㅋ

처음에는 배열안에 특정 값을 제거하는 법을 몰라서 검색을 해봤더니 indexOf()splice()를 이용하라고 해서 

그 방법대로 함 간단히 설명하자면 indexOf()로 특정 값의 위치를 찾고 splice()로 그 값을 제거를 해주는 방법이다.

위에 코드대로 해야 하는데 

delLong = arr.indexOf(delLong)
delShort = arr.indexOf(delShort)
arr.splice(delLong, 1)
arr.splice(delShort, 1)

이런식으로 하니 위에서 splice로 제거를 하고 그다음 또 제거를 할려고 할때 arr 값 자체가 변경이 되서 원래 위치에 값이 사라져서 

답이 제대로 나오지를 않았다 예를들어서 arr이 ['iAmLongest', 'iAmNotShortest', 'iAmLongest', 'long'] 이고

delLong이 2 delShort 3 이 나오고 delLong 부분을 splice 해주면 arr은 ['iAmLongest', 'iAmLongest', 'long'] 이렇게 돼서 

delShort를 삭제하려고 splice(3,1)을 할려고 해도 arr은 2까지 밖에 없어서 삭제가 안돼서 원하는 값이 안나오는것임 

 

음 이문제 풀면서 그냥 초깃값은 조건에 나온걸 써야 겠다는 생각이 들었고 살짝 잊고 있었던 메소드들도 다시 돌아보는 시간이었다.

Comments