코딩테스트 연습 - [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
}
- 우선 A~Z까지 1~26의 값을 갖는
dic 오브젝트를 생성한다.
- 오브젝트의 마지막 값인 26을 초기값으로 설정한
size 변수를 생성한다.
- 누적해서 비교할 문자열
str변수를 생성한다.
- str에 누적하기 위한 인덱스 값
pointer를 생성한다.
- 각 인덱스 값을 저장할 배열
result를 생성한다.
- 인자
msg의 문자열의 길이가 0이 될 때까지 동작하는 반복문을 실행한다.
newStr은 현재 누적된 문자열 + 다음번째 문자열을 더한 값이다.
- 만약
dic 오브젝트에 newStr 을 key로 가진 값이 존재한다면 pointer 를 1 더해주고 str 값을
str + msg[pointer] 인 newStr로 재할당해준다.
- 만약
dic 오브젝트에 newStr을 key로 가진 값이 존재하지 않다면 아래를 실행한다.
result 배열에 dic[str]을 push한다.
dic 오브젝트에 key를 newStr, value를 ++size를 추가한다.
msg에서 pointer 인덱스 앞에 있는 문자열(들)을 잘라낸다.
pointer를 초기화 한다.
str을 초기화 한다.