새소식

Programmers

[Programmers] [3차] 압축 문제 - (javascript)

  • -
728x90
문제 이름 :  [3차] 압축

<<< 문제 내용 >>>

 

function solution(msg) {
    const dic = ['A','B','C','D','E',
                'F','G','H','I','J',
                'K','L','M','N','O',
                'P','Q','R','S','T',
                'U','V','W','X','Y',
                'Z'];
    
    let answer = [];
    
    msg = msg.split('');
    
    for(let i=0; i<msg.length; i++){
        let temp = String(msg[i]);
        let cnt = i;
        while(true){
            let x = temp;
            cnt++;
            temp += String(msg[cnt]);
            
            if(dic.indexOf(temp) === -1) {
                answer.push(dic.indexOf(x)+1);
                break; 
            }
        }
        
        dic.push(temp);
        
        i = cnt-1;
    }
    
    return answer;
}

* 구현문제고, 제 정답이 가장 깔끔한 코드는 아닐 수 있으니 다른 답도 참고해보시면 좋을거 같습니다.

 

 

일단, KAKAO 기준 K를 가져와서 dic에 저장돼있는 문자라면 한 문자씩 붙이는 식으로 진행합니다.

이때, 그 문자가 사전에 없을때 이전 문자 기준으로 사전에 등록된 번호를 받아야하기 때문에 문자를 붙이기 전 x에 잠시 담아줍니다.

 

사전에 등록되지 않았다면 이 문자를 push해주고, 방금 붙였던 문자열 길이 만큼 i를 띄워 넘겨야 합니다.

cnt-1인 이유는 temp는 다음 문자열을 먼저 체크해보는 것이기 때문에, -1를 해주어야 원하는 지점에서 다시 for문이 시작됩니다.

 

 

 

도움이 되셨다면 공감 부탁드립니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.