어디서 많이 본 듯한 문제였다, 예전에 프로그래머스에서 문자열 압축 문제와 비슷한 문제같은 느낌이... 근데 그때는 손도 못대고 풀이를 봐도 이해도 안됐었는데 그나마 문제가 조금 더 쉬워서인지 그래도 해결은 했다.
function solution(str) {
let char = str[0];
let answer = str[0];
let idx = 1;
for (let i = 1; i < str.length; i++) {
if (char === str[i]) {
idx++;
} else {
if (idx !== 1) {
answer += String(idx);
}
idx = 1;
char = str[i];
answer += char;
}
}
console.log(answer);
}
일단 코드 풀이부터 해보자면 초기 char 를 str의 첫번째 단어로 잡고 answer 라는 문자열에도 해당 단어로 선언했다.
만약 for 문을 돌면서 동일한 문자가 나온다면 idx 값이 늘어날테고 그게 아니라면 새로운 문자일테니
char 와 str[i] 번째 문자가 같으면 idx 값을 증가시키고
그게 아니라면 기존 문자열의 idx 값 만큼 answer 문자열에 추가 (이때 반복횟수가 1인 경우 생략이기에 idx !== 1인 경우에만 추가)후 idx 값은 1로 재할당 및 char 도 재할당 하였다.
그리곤 answer의 문자열에 새로 할당된 char 를 추가하는 형식으로 for문을 돌렸다.
function solution(s){
let answer="";
let cnt=1;
s=s+" ";
for(let i=0; i<s.length-1; i++){
if(s[i]===s[i+1]) cnt++;
else{
answer+=s[i];
if(cnt>1) answer+=String(cnt);
cnt=1;
}
}
return answer;
}
강사님의 풀이 방법이다, 기본적으로는 내가 풀이한 것과 비슷한데 어찌 코드가 더 깔끔하다 쩝...
'알고리즘' 카테고리의 다른 글
멘토링(블루투포스) (0) | 2022.07.14 |
---|---|
뒤집은 소수 (0) | 2022.07.13 |
자릿수의 합 (0) | 2022.07.13 |
문자거리 (0) | 2022.07.12 |