[algorithm] 중복단어제거

Ho-eng·2023년 4월 15일
0

❓ 중복단어제거


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

  • 입력설명

    첫 줄에 자연수 N이 주어진다.(3<=N<=30)
    두 번째 줄부터 N개의 문자열이 주어진다. 문자열의 길이는 100을 넘지 않습니다.
  • 출력설명

    첫 줄부터 중복이 제거된 문자열을 차례로 출력한다.
  • 입력예제 1

    5
    good
    time
    good
    time
    student

  • 출력예제 1

    good
    time
    student


❗ 문제 풀이

내 풀이

<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function solution(str) {
        //배열을 선형탐색하는데, 문자열만 담을 수 있음
        // 중복되는걸 제거해야되니까, 배열의 인덱스의 문자열을 비교
        // 중복되지 않은 것들만 빈배열에 담아보자

        let answer = []

        for (let i of str) {
          if (!answer.includes(i) && typeof i === "string") {
            answer.push(i)
          }
        }

        return answer
      }

      let str = [5, "good", "time", "good", "time", "student"]
      console.log(solution(str))
    </script>
  </body>
</html>
  1. answer이란 변수를 하나 선언하고 빈 배열을 할당한다.
  2. 배열 선형탐색을 돌면서,
    중복된 문자열이 없고, 문자형이 참인 경우, answer에 담는다
  3. answer을 리턴하면 끗.

정답 소스

<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(s){  
                let answer;
                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>
  • indexOf() 와 filter()을 이용하여 구현하였다.
  • indexOf() => 같은 문자열 찾기 가능
  • filter() => 참인 경우만을 걸러내 새로운 리스트를 만듬.
//대충이런느낌쓰
//console.log(s.indexOf("time")); => 2를 반환. 즉, time이 2개있다는 뜻.
//filter의 첫번째 파라미터는 callback,
// callback의 첫번째 파라미터는 값, 두번째 파라미터는 인덱스

str.filter((v,i) => {
return str.indexOf(v) === i
});
profile
매일 '어제의 나와 오늘의 나는 무엇이 다를까?'를 고민하는 김호엥입니다.

0개의 댓글