2단계 : 압축

차차·2023년 1월 30일
post-thumbnail

코딩테스트 연습 - [3차] 압축

function solution(msg) {
    let dic = [..."ABCDEFGHIJKLMNOPQRSTUVWXYZ"].reduce((a,b,i) => ({...a,[b]:i+1}),{})
    let size = 26;
	let str = msg[0];
    let pointer = 1;
    let result = [];
    
    while(msg.length > 0){
        let newStr = str+msg[pointer];
        if(dic[newStr]){
            pointer++;
            str = newStr;
        }else{
            dic[newStr] = ++size;
            result.push(dic[str]);
            msg = msg.slice(pointer);
            pointer = 1; 
            str = msg[0]
        }
    }
    return result
}
  1. 우선 A~Z까지 1~26의 값을 갖는 dic 오브젝트를 생성한다.
  2. 오브젝트의 마지막 값인 26을 초기값으로 설정한 size 변수를 생성한다.
  3. 누적해서 비교할 문자열 str변수를 생성한다.
  4. str에 누적하기 위한 인덱스 값 pointer를 생성한다.
  5. 각 인덱스 값을 저장할 배열 result를 생성한다.
  6. 인자 msg의 문자열의 길이가 0이 될 때까지 동작하는 반복문을 실행한다.
  7. newStr은 현재 누적된 문자열 + 다음번째 문자열을 더한 값이다.
  8. 만약 dic 오브젝트에 newStr 을 key로 가진 값이 존재한다면 pointer 를 1 더해주고 str 값을
    str + msg[pointer]newStr로 재할당해준다.
  9. 만약 dic 오브젝트에 newStr을 key로 가진 값이 존재하지 않다면 아래를 실행한다.
    1. result 배열에 dic[str]을 push한다.
    2. dic 오브젝트에 key를 newStr, value를 ++size를 추가한다.
    3. msg에서 pointer 인덱스 앞에 있는 문자열(들)을 잘라낸다.
    4. pointer를 초기화 한다.
    5. str을 초기화 한다.
profile
나는야 프린이

0개의 댓글