문제 이름 : [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문이 시작됩니다.
도움이 되셨다면 공감 부탁드립니다.