JS 알고리즘 문제풀이/섹션 1. 기본문제 풀이

17.중복단어제거

crab. 2022. 1. 12. 11:34

📌강의정리

n개의 문자열중에서 중복된 단어를 제거하고 내라는 문제이다.

앞에서 사용했던 indexOf를 써서 풀어보자.

s라는 배열은 문제에서 제공받은 문자열이다.

먼저 indexOf("time")을 해서 어떤 값이 반환되는지 알아보자.

answer=s.filter(); 를 하면 s라는 객체가 filter()라는 메소드를 호출했다.

filter는 원본배열을 바꾸는게 아닌 변환된 배열을 새로만든다.

filter(function(v,i){이 내부는 콜백함수의 내부이다.});

filter라는 메소드가 의미하는 것은 s라는 객체의 value를 하나씩 거치면서 콜백함수를 호출한다.

이제 if(s.indexOf(v)===i) 가 성립되면 return true; 를 하면 filter는 true인 값만 새로운 객체에 넣어주기 때문에 이제 답이 나오게 된다.

또한 그냥 return s.indexOf(v)===i 이면 참일때만 그 부위를 새로운 배열에다 요소로 넣는다.

📌느낀점

나는 그냥 배열에 push를 넣어서 풀었는데 강사님은 전에 배운 filter메서드를 써서 풀었다.

솔직히 내가 푼 방법이 더 간단해 보이기는 하는데

그래도 filter로 푸는 방법이랑 다른 메서드들 map,forEach,reduce도 실시간으로 알아내는 법을 구상해봐야겠다.

filter메서드의 true를 이용하는 방법에 익숙해질 필요가 있다.

//나의 코드
<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(s){  
                let answer=[];
                for(let i=0;i<str.length;i++){
                    if(i===str.indexOf(s[i])) answer.push(s[i])
                }
                return answer;
            }
            let str=["good", "time", "good", "time", "time", "abc", "student"];
            console.log(solution(str));
        </script>
    </body>
</html>
//강사님 코드
<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(s){  
                let answer;
                //console.log(s.indexOf("time"));
                answer=s.filter(function(v, i){
                    return s.indexOf(v)===i;
                });
                return answer;
            }
            let str=["good", "time", "good", "time", "student"];
            console.log(solution(str));
        </script>
    </body>
</html>