FrontEnd/프로그래머스

[JS] 문자열 압축

728x90

문자열을 1~s.length 까지 하나씩 검사해봐서 가장 최소의 경우를 찾았다.

 

 

reduce를 활용해서 문제에서 말하는대로 문자열을 만들었다. 단,

 

 

aabbccdd 가 문제에서 2a2b2c2d였다면 

a2b2c2d2 <=== 이런식으로 숫자가 뒤로오게 만들었다.

 

어차피 문자열 길이에는 영향을 주지 않기에 위와같이 구현해 보았다.

 

 

 

function solution(s) {
    
    let ret = s.length
    for (let i = 1 ; i < s.length ; i++) {
        const ary = []
        for (let j = 0 ; j <s.length ; j+=i) {
            ary.push(s.slice(j,j+i))
        }
        
        const str = ary.reduce((a,c,idx) => {
            const [ret,cnt,tmp] = a
            if (c===tmp) {
                if (idx === ary.length-1) return [ret+ String(cnt+1),1,c]
                return [ret,cnt+1,tmp]
            }
            else {
                if (cnt<2) return [ret+c,1,c]
                else return [ret+ String(cnt) +c,1,c]
            }
            
        },["",0,0])
        
        ret = Math.min(ret,str[0].length)
    }
    return ret
}
728x90

'FrontEnd > 프로그래머스' 카테고리의 다른 글

[JS] 스킬트리  (0) 2023.06.27
[JS] 방문 길이  (0) 2023.06.25
[JS] 괄호 변환  (0) 2023.06.25
[JS] 프렌즈4블럭  (0) 2023.06.23
[JS] 튜플  (0) 2023.06.21