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

짧은코딩

문자열 압축 본문

반응형

 

해결법

-내 풀이

나는 몇 개가 중복되는지 체크하는 count 변수, 가장 최근에 어떤 문자가 나왔는지 저장하는 now 변수를 두고 문제를 풀었다. 

for 문으로 돌면서 만약 count가 0이면 answer에 문자를 추가하고 count, now를 갱신했다. 그리고 count가 0이 아니고 현재 문자가 가장 최근 문자와 같으면 count++를 했다. count가 1 초과면 또 다시 now, count, answer을 갱신했다.

마지막 if문을 안하면 'aaa'라는 문자를 입력했을 때, a만 나오기 때문에 이렇게 해줬다.

내 코드

<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function solution(s) {
        let answer = "";

        let count = 0;
        let now = "";

        for (let i = 0; i < s.length; i++) {
          if (count === 0) {
            answer += s[i];
            now = s[i];
            count++;
          } else {
            if (now === s[i]) {
              count++;
            } else {
              if (count > 1) answer += count;

              now = s[i];
              count = 1;
              answer += s[i];
            }
          }
        }

        if (count > 1) answer += count;

        return answer;
      }

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

 

강사님 해결법

우선 입력한 문자열 맨 뒤에 공백 문자를 추가한다. 그리고 처음 문자부터 (전체 길이 - 1)까지 반복한다. 왜냐하면 공백 문자를 추가했기 때문이다. 이러고 지금 문자와 뒤에 문자를 비교하면서 다르면 answer에 문자와 중복된 숫자를 추가하면 된다.

강사님 코드

<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function solution(s) {
        let answer = "";

        s += " ";

        let count = 1;

        for (let i = 0; i < s.length - 1; i++) {
          if (s[i] !== s[i + 1]) {
            answer += s[i];
            if (count > 1) answer += String(count);
            count = 1;
          } else count++;
        }

        return answer;
      }

      let str = "KKHSSSSSSSE";
      console.log(solution(str));
    </script>
  </body>
</html>
반응형

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

졸업 선물  (0) 2022.08.21
멘토링  (0) 2022.08.21
가장 짧은 문자거리  (0) 2022.08.16
숫자만 추출  (0) 2022.08.15
유효한 팰린드롬  (0) 2022.08.14
Comments