🤯 코딩테스트/Javscript

[자바스크립트 알고리즘 문제풀이(코딩테스트 대비)] Section 01 - 중복 문자 제거

kangkibong 2022. 1. 10. 13:31

※ 문제

소문자로 된 한개의 문자열이 입력되면 중복된 문자를 제거하고 출력하는 프로그램을 작성하세요. 제거된 문자열의 각 문자는 원래 문자열의 순서를 유지합니다.

 

▣ 입력설명

첫 줄에 문자열이 입력됩니다.

 

▣ 출력설명

첫 줄에 중복문자가 제거된 문자열을 출력합니다.

 

▣ 입력예제 1

ksekkset

 

▣ 출력예제 1

kset

 

※ 코드

<html>

<head>
  <meta charset="UTF-8">
  <title>출력결과</title>
</head>

<body>
  <script>
    function solution(s) {
      let answer = "";
      for (let i = 0; i < s.length; i++) {
        if (s.indexOf(s[i]) === i) {
          answer += s[i];
        }
      }
      return answer;
    }

    console.log(solution("ksekkset"));
  </script>
</body>

</html>

 

※ 설명

배열에 있는 item들을 확인하는 것이 아니기 대문에 let x of s 형태로 작성하는 것이 아닌 문자열 하나를 가지고 확인하는 것이기 때문에 변수 i를 사용하여 문자열의 길이 만큼 작동하는 반복문을 작성한다.

이후 문자열의 indexOf(s[i])의 값이 i와 같을 경우 answer += s[i]의 값을 할당한다.

왜냐하면 중복되는 문자에 해당할 경우 indexOf()의 값이 이전 index 값을 return하고 그렇지 않을 경우 i와 같은 값을 return 하게 된다. 위와 같이 “ksekkset”같은 경우 i, s[i], indexOf(s[i])를 각각 출력하면 다음과 같이 나온다.

0, k, 0
1, s, 1
2, e, 2
3, k, 0
4, k, 0
5, s, 1
6, e, 2
7, t, 7

따라서 indexOf(s[i])와 i가 같으면 중복되지 않는 문자 이므로 이 값을 answer에 더해준다.

 

※ 핵심

s.indexOf(letter, position): letter을 기준으로 position만큼의 index값을 return한다.

s = "ksekkset"

s.indexof('s');    // 1(letter기준으로 가장 작은 index값을 return)
s.indexOf('s', 1); // 5
s.indexOf('k', 2); // 4

해당 내용은 김태원님의 자바스크립트 알고리즘 문제풀이 강의를 듣고 작성한 글입니다.