본문 바로가기

알고리즘

문자열 압축

어디서 많이 본 듯한 문제였다, 예전에 프로그래머스에서 문자열 압축 문제와 비슷한 문제같은 느낌이... 근데 그때는 손도 못대고 풀이를 봐도 이해도 안됐었는데 그나마 문제가 조금 더 쉬워서인지 그래도 해결은 했다.

 

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