반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

짧은코딩

가장 짧은 문자거리 본문

코딩테스트 with JS/자바스크립트 알고리즘 문제풀이(인프런)

가장 짧은 문자거리

5_hyun 2022. 8. 16. 03:03
반응형

 

내 해결법

나는 indexOf를 이용해서 t의 위치를 다 구해줬다. 그리고 이중 반복문을 사용해서 거리를 구했다. 비효율적이라고 생각한다.

 

내 코드

<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function solution(s, t) {
        let answer = Array.from(
          { length: s.length },
          () => Number.MAX_SAFE_INTEGER
        );

        let indexT = [];

        let i = 0;
        while (i < s.length) {
          let tmp = s.indexOf(t, i);
          indexT.push(tmp);

          i = tmp + 1;
        }

        for (let x of indexT) {
          for (let i = 0; i < s.length; i++) {
            if (i === x) answer[i] = 0;
            else {
              answer[i] = Math.min(answer[i], Math.abs(x - i));
            }
          }
        }

        return answer;
      }

      let str = "teachermode";
      console.log(solution(str, "e"));
    </script>
  </body>
</html>

 

강사님 풀이

큰 값을 하나두고 t값이 나오기 전까지 +1을 하다가 t값이 나오면 그 큰 값을 0으로 만든다. 그리고 이것을 오름차순, 내림차순으로 for문을 2번 사용하면 자연스럽게 가까운 값이 구해진다. 이때 2번째 for문에서는 둘 중에서 작은 값을 선택하면 된다.

 

강사님 코드

<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function solution(s, t) {
        let answer = [];
        let p = 1000;
        
        for (let x of s) {
          if (x === t) p = 0;
          else p++;

          answer.push(p);
        }

        p = 1000;
        for (let i = s.length - 1; i > -1; i--) {
          if (s[i] === t) p = 0;
          else answer[i] = Math.min(answer[i], p);

          p++;
        }
        return answer;
      }

      let str = "teachermode";
      console.log(solution(str, "e"));
    </script>
  </body>
</html>

이렇게 p를 문자 최대 길이보다 크게 두고 문제를 해결하면 된다.

반응형

'코딩테스트 with JS > 자바스크립트 알고리즘 문제풀이(인프런)' 카테고리의 다른 글

멘토링  (0) 2022.08.21
문자열 압축  (0) 2022.08.17
숫자만 추출  (0) 2022.08.15
유효한 팰린드롬  (0) 2022.08.14
회문 문자열  (0) 2022.08.13
Comments