3개 이상 연속되는 문자 압축하기, compressString

2021. 8. 18. 19:55
반응형

문제 : 문자열을 입력받아 연속되는 문자가 있을 경우, 연속 구간을 반복되는 수와 문자로 조합한 형태로 압축한 문자열을 리턴해야 합니다.

주의사항 : 빈 문자열을 입력받은 경우, 빈 문자열을 리턴해야 합니다. 3개 이상 연속되는 문자만 압축해야 합니다.

 

내가 푼 원리 : 문자열을 하나씩 추가하는데, 추가하면서 연속해서 같은 문자가 3개 이상되면 그만큼을 갯수+문자 조합으로 바꿔준다. 이렇게 풀어야겠다고 생각을 해놓고 코드를 짰는데 부딪히는게 너무 많았다. 콘솔창에서 디버그만 100번은 돌려본것 같다..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function compressString(str) {
  //aabbbbccbb -> aa4bccbb
  //a넣고 a 넣고, b넣고 b넣고 b넣었는데? 3개네? 3b로 바꿔 b 넣었는데3b네? 4b로 바꿔 c넣고.........
  if(str === '') { //빈 문자열을 받으면 빈문자열 리턴
    return '';
  }
  let result = str[0];
  let count = 1;
  for(let i = 1; i < str.length; i++){
    result = result + str[i]; //우선 한글자씩 result에 조합해준다.
    if(str[i - 1=== str[i] && count < 3){ //count < 3을 안해주니까 3이 넘었을 때 밑에서 더해주는데 여기서 또 중복으로 1이 더해짐
      count += 1;
    }
    if(str[i - 1!== str[i]){
      count = 1;
    }
    if(count >= 3){
      if(str[i] !== str[i + 1]){
      result = result.replace(result.slice(-count), count + str[i]) //예를 들어 현재 result가 aabbb이면 bbb를 3b로 교체한다.
      count = 1;
      }
      else if(str[i] === str[i + 1]){
        count += 1;
      }
    }
  }
  return result;
}
cs

이렇게 섹션1 마지막 알고리즘 문제였다.

반응형
LIST

BELATED ARTICLES

more