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

16.중복문자제거(indexOf)

crab. 2022. 1. 12. 11:34

📌강의정리

단어가 들어오면(소문자로 된) 중복제거하고 출력하는 문제이다.

indexOf라는 메소드를 사용할 것이다.

console.log(s.indexOf("k"));를 하면 0이뜬다.

indexOf는 문자열에서 제일 처음있는 문자의 인덱스를 출력한다.

indexOf('k', 1)을 하면 1번인덱스부터 찾아서 나오는 k의 인덱스를 반환한다.

이거 이용하면 특정문자찾기도 가능하다.

for of 쓰면 안되고 for(;;)써야 한다.

i를 변수로 콘솔을 다 찍으면서 indexOf의 흐름을 알아보자.

이제 if(s.indexOf(s[i])===i) 를 이용해서 처음발견된 위치와 본래의 위치가 같으면 answer 에 s[i]를 누적하면 된다.

특정문자의 개수를 찾는 것도 가능하다.

let pos=s.indexOf('k');

로 찾다가 while(pos≠-1)을 해서 -1이면 pos=s.indexOf('k',pos+1)을 하면

증감값으로 특정문자의 개수를 알 수 있다.

📌느낀점

알고리즘은 진짜 두뇌싸움이 강한것같다.

분명 알고있는기능인데 이 기능을 심플하게 이용해서 중복을 없앴다...

알고나면 항상 왜 그 생각을 못했을까 싶다.

어제도 이거랑 똑같은기능을 구현하는데 어마어마한 시간과 코드를 사용했다.

진짜 알고리즘은 신기하다.

잘 알아둬서 두번째에는 실수하지 않도록 최선을 다해보자.

//나의 코드, 오류
<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(s){  
                let answer="";
                for(let x of s){
                    if(answer.indexOf(x) != s.indexOf(x))   answer+=s[s.indexOf(x)]
                }
                return answer;
            }
            console.log(solution("kskeksqskkqset"));
        </script>
    </body>
</html>
//강사님 코드
<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(s){  
                let answer="";
                //console.log(s.indexOf("K"));
                for(let i=0; i<s.length; i++){
                    //console.log(s[i], i, s.indexOf(s[i]));
                    if(s.indexOf(s[i])===i) answer+=s[i];
                }
                return answer;
            }
            console.log(solution("ksekkset"));
        </script>
    </body>
</html>

'JS 알고리즘 문제풀이 > 섹션 1. 기본문제 풀이' 카테고리의 다른 글

17.중복단어제거  (0) 2022.01.12
15.가운데 문자 출력(substring, substr)  (0) 2022.01.12
14.가장 긴 문자열  (0) 2022.01.12
13.대소문자변환  (0) 2022.01.12
12.대문자로 통일  (0) 2022.01.12