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
'학습 TIL > Algorithm' 카테고리의 다른 글
가장 짧은 문자열과 가장 긴 문자열 제거, removeExtremes (0) | 2021.08.18 |
---|---|
홀수 사이에만 '-' 넣기, insertDash (0) | 2021.08.18 |
각 단어의 첫글자 조합하기, firstCharacter (0) | 2021.08.16 |
첫 글자가 대문자인 문자열 만들기, letterCapitalize (0) | 2021.08.16 |
convertListToObject (0) | 2021.08.16 |