[프로그래머스] 문자열 압축

K S Michael·2022년 3월 11일
0

알고리즘

목록 보기
2/5

문제 링크

문제 설명

n개씩 잘라서 압축했을 때 가장짧은 case의 길이 구하기

sresult
"aabbaccc"2a2ba3c7
"ababcdcdababcdcd"2ababcdcd9
"abcabcdede"2abcdede8
"abcabcabcabcdededededede"2abcabc2dedede14
"xababcdcdababcdcd"17
function solution(s) {
    var answer = s.length; // 초기값은 가장 큰 값인 s의 길이
    let temp = []; // [길이가 n인 문자열]
    let count = 1; // n개씩 자르기
    let same = 1 // 자기 자신은 무조건 존재 하므로 초기값은 1
    let tempAnswer = "" // 문자열 축적하기
    while(count<s.length){ // count 만큼 이동하면서 탐색하는데 1/2 넘어가면 의미 없음
        for(let z = 0 ; z < s.length ; z+=count){ // count 만큼 이동하면서 탐색
            temp.push(s.slice(z,z+count)) // count 만큼 잘라서 배열로
        }
        for(let i = 0 ; i < temp.length ; i ++){ // 앞뒤가 같은것을 count 해서 same에 저장, 다른면 same초기화 count개수랑 중복개수 더해서 answer에 저장.
            
            if(temp[i] === temp[i+1]){
                same++
                // console.log("같을때",temp[i],temp[i+1], count, same)   
            } else {
                // 다르면 카우트 만큼 저장하고 삭제
                // console.log("debug", tempAnswer,same,temp[i]  )
                tempAnswer += (same === 1? "": same) + temp[i] 
                // console.log("다를때",temp[i],temp[i+1], tempAnswer)   
                same = 1
            }
        }
        if (answer > tempAnswer.length){
            answer = tempAnswer.length
        }
      
        tempAnswer = ""
        temp = []
        count++
    }
    return answer;
    
    // 숫자가 2자리 일때
}
profile
차근차근

0개의 댓글

관련 채용 정보