[JS][프로그래머스 -LEVEL 2 - 문자열 압축 ]

정대만·2023년 7월 26일

코딩테스트

목록 보기
34/51
post-thumbnail

해석

  • 단어를 자르고 같은지 안같은지를 푸는 문제이다.
  • 어떻게 자르는가 에 따라 문제가 달라지기 때문에 substr 을 사용해서 잘라도되지만
    한번에 자르는것을 보고 싶어서 정규식을 사용하였다.

function chunkString(str, length) {
//length의 길이 만큼 글자를 자른다.
    return str.match(new RegExp('.{1,' + length + '}', 'g'));
// 정규식으로 length의 길이만 큼 자라서 배열로 return 합니다.
}

원하는 길이만큼 strring 이 잘라져서 배열로 나오는것을 볼수 있다.

  • 그다음 같은것을 찾아야된다. 나는 splice 를 사용해서 이만큼 같으면 이부분을 빼주고 다른 것들로 채워주세요 라고 썼는데 이런 경우 for 문으로 돌기 때문에 인덱스값이 이상해지는 경우가많아 값이 이상하게 나오는 경우가 많았다. 따라서 어떻게 splice 를 사용하지 않고 값을 계산할수 있을가에 대한 해답을 고민하다가
    stack 를 사용해서 기준을 두고 그것과 같은경우 count 값을 늘려준뒤 빈 string 을 선언후 거기에다가 붙어주면서 새로운 string 을 만들면 풀렸다.

splice 를 안썼으면 금방 풀엇을수도... ㅋㅋ

내 코드


function chunkString(str, length) {
//length의 길이 만큼 글자를 자른다.
    return str.match(new RegExp('.{1,' + length + '}', 'g'));
// 정규식으로 length의 길이만 큼 자라서 배열로 return 합니다.
}
function solution(s) {
    if(s.length==1){
        return 1;
        
    }
    var answer = 0;
    var min_length= Infinity;
   const check_total= function(arr){
    // 자른거 어디까지 같은지 확인 병신 스택쓰자 
     var return__='';
     var stack__= [ arr[0],1]
    for(var i=1; i<arr.length; i++){
      if(arr[i]==stack__[0]){
           stack__[1]+=1;           
       }
       else{
// 다른 경우 
           if(stack__[1]==1){
                   return__+= stack__[0];
           }
           if(stack__[1]>1){
                return__+= stack__[1]+''+stack__[0];
           }
   stack__= [ arr[i],1];
}


}  
       
   if(stack__[1]==1){
                   return__+= stack__[0];
           }
           if(stack__[1]>1){
                return__+= stack__[1]+''+stack__[0];
           }
return ( return__)   
    
       }
  
   
function chunkString(str, length) {
//length의 길이 만큼 글자를 자른다.

    return str.match(new RegExp('.{1,' + length + '}', 'g'));
// 정규식으로 length의 길이만 큼 자라서 배열로 return 합니다.
}
    for(var i=1; i<s.length; i++){
        var hey_return=chunkString(s,i);
        //여기서 자른거 받음 
       
       min_length=Math.min  ( min_length,check_total(hey_return).length)
    }
    

    return min_length;
}

profile
안녕하세요

0개의 댓글