article thumbnail image
Published 2022. 6. 10. 15:13
문자열 압축
알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는
문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램을 작성하시
오. 단 반복횟수가 1인 경우 생략합니다.
▣ 입력설명
첫 줄에 문자열이 주어진다. 문자열의 길이는 100을 넘지 않는다.
▣ 출력설명
첫 줄에 압축된 문자열을 출력한다.
▣ 입력예제 1
KKHSSSSSSSE
▣ 출력예제 1
K2HS7E

1. for문 활용 인덱스 비교해준다.
2. 조건문()을 넣어준다.
3. 같은 인덱스가 있으면 카운터를 1씩 올려준다.
4. 그게 아니면 원래의 인덱스를 넣어준다.
5. 여기서 반복 횟수가 1일땐 생략한다고 했으니,
   if조건문을 하나 더 넣어서 count가 1보다 크면 이라는
   조건을 넣어서 1은 생략 시켜준다.
<html>

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

<body>
  <script>
    function solution(s) {
      let answer = '';
      let count = 1; //자신이 1이라서 
      for (let i = 0; i < s.length; i++) {
        if (s[i] === s[i + 1]) { //옆에도 똑같은 문자열이 있으면 카운터 1올려줘
          count = count + 1
        } else {
          answer = answer + s[i] //현재 인덱스를 그대로 넣어줘
          if (count > 1) { //카운터가 1보다 크면?
            answer = answer + count
            count = 1;
          }
        }
      }
      return answer;
    }
    let str = "KKHSSSSSSSE";
    console.log(solution(str));
  </script>
</body>

</html>

처음에 카운터를 1로 초기세팅해준이유는,

현재 비교 대상이 K[i] 기준이기때문에 K자신은 포함시키지않는다.

그래서 0으로 세팅하면 문자열에 K가 두개임에도 불구하고 'KHS7E' 가 출력된다.

 

마지막 else부분을 

else {
answer = answer + s[i] 
answer = answer + counter
counter = 1
}

//K2H1S7E1

이렇게 바꿔보자.

출력하면 'K2H1S7E1'가 출력된다.

마지막에 counter =1인이유는 다시 카운터를 재세팅해주어야 다음값을 계산할 수 있기 때문이다.

문제에서 반복횟수가 1인 경우엔 생략해달라했으니,

1보다 크다는 기준을 넣어서 카운터가 1일땐 경우엔 else로 패쓰되게끔 만들어준다.

if (count > 1) { 
answer = answer + count
count = 1;
}

'알고리즘' 카테고리의 다른 글

[알고리즘 문제] 4-2번  (0) 2022.06.13
[알고리즘 문제] 4-1번  (0) 2022.06.11
[알고리즘 문제] 3-4번  (0) 2022.06.10
[알고리즘 문제] 3-3번  (0) 2022.06.10
[알고리즘 문제] 3-2번  (0) 2022.06.08
복사했습니다!