본문 바로가기
코딩테스트 by JS

JavaScript<중복문자제거>

by mickey7 2023. 3. 14.

<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(s){  
                let blank =[...s];  //스프레드 연산자로 문자열->배열로 !
                //console.log(blank) --> ['k', 's', 'e', 'k', 'k', 's', 'e', 't']
                for(let i=0; i<s.length; i++){
                    for(let j=i+1; j<s.length; j++){
                        if(blank[i] == blank[j]){
                            console.log(blank[i]);
                            console.log(blank[j]);
                            blank.splice(j,1);  //요소 삭제 후에는 순서가 업데이트 안되면 무한 반복..        
    
                            console.log(i,j);
                            console.log(blank); //1차 풀이 실패
                                                //2차 풀이 실패
                        }
                    }
                }
                
                return answer;
            }
            //1차 풀이 실패 --> 구글링으로 다른 배열 만들지 않고 한 배열 안에서 중복찾는 방법으로 선회
            console.log(solution("ksekkset"));
        </script>
    </body>
</html>
  • 배열 요소 삭제를 위해 스프레드 연산자로 문자열을 배열로 바꿈 
  • 이중 반복문을 통해 배열 요소 비교를 통해 중복 문자를 찾으려고 함.
  • 배열의 splice()메소드를 활용해서 중복 문자를 제거하려고 했는데 첫번째 중복문자와 두번째 중복문자가 붙어있을 때 생략하고 넘어가버림 --> splice메소드가 배열 요소를 삭제하면 바로 배열의 순서가 땡겨지기 때문.
  • 그렇다고 중복 문자열을 제거한 후에 j--를 이용하면 무한 루프 생성.
  • 풀이 실패! --> 아닌 것 같으면 아예 다른 방식으로 접근하는 게 필요하다고 생각, 계속 매달려봤자 답이 안나온다..

 

 


 

indexOf를 활용한 풀이
<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(s){  
                let answer = '';
                for(let i=0; i<s.length; i++){
                    //console.log(s[i]);
                    //console.log(s.indexOf(s[i]))
                    if(s.indexOf(s[i])===i){
                        
                        answer += s[i];
                    }
                }
                
                return answer;
            }
            //1차 풀이 실패 --> 구글링으로 다른 배열 만들지 않고 한 배열 안에서 중복찾는 방법으로 선회
            console.log(solution("ksekkset"));
        </script>
    </body>
</html>

indexOf는 String의 메소드인데 자세한 것은 아래 사이트를 참고!

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf

 

String.prototype.indexOf() - JavaScript | MDN

indexOf() 메서드는 호출한 String 객체에서 주어진 값과 일치하는 첫 번째 인덱스를 반환합니다. 일치하는 값이 없으면 -1을 반환합니다.

developer.mozilla.org

  • 반복문을 활용해서 중복되는 문장을 더 수월하게 찾을 수 있었다. 
  • 반복문의 변수 i와 indexOf를 통해 문자의 첫번째 위치가 나오는 인덱스가 일치하는 지 여부를 확인해서 일치하면 출력값에 한 개씩 추가키는 방식으로 해결.

'코딩테스트 by JS' 카테고리의 다른 글

<JavaScript> 문자열 내 개수 비교  (0) 2023.03.17
JavaScript <자릿수더하기>  (0) 2023.03.16
JavaScript<중복단어제거>  (0) 2023.03.15
JavaScript <대문자찾기>  (0) 2023.03.12
JavaScript <일곱난쟁이>  (1) 2023.03.12