코딩테스트
[프로그래머스/javascript] 3차 압축
_서리__
2023. 2. 28. 22:58
function solution(msg) {
//LZW압축
//일단 해보고 재귀로 푸는 법 있나 생각해보기
let indexArr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
indexArr = indexArr.split('')
let msgArr = msg.split('')
var answer = [];
for(let i=0;i<msg.length;i++){
let j=i+1;
let str = msg[i]
while(indexArr.includes(str)&&msg[j]){
str+=msg[j]
j++;
}
if(msg[j]){
indexArr.push(str)
}
if(j>i+1){
str = str.slice(0,-1)}
answer.push(indexArr.indexOf(str)+1)
}
return answer;
}
처음 풀었던 풀이. 이렇게 풀면 안되는 이유는 answer배열에 추가해준 글자는 삭제해줘야해서.
function solution(msg) {
//LZW압축
//일단 해보고 재귀로 푸는 법 있나 생각해보기
let indexArr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
indexArr = indexArr.split('')
let msgArr = msg.split('')
var answer = [];
return strFn(msg,indexArr,answer)
}
function strFn(str,indexArr,answer){
if(str.length===0) return answer
let word =str[0];
let wordIdx = 1;
let last = false;
for(let i=1;i<str.length;i++){
if(indexArr.includes(word)&&str[i]){
wordIdx = i
word+=str[i]
}
else break;
}
let newWord=''
let newStr = ''
if(!indexArr.includes(word)){
newWord = word.slice(0,-1)
newStr = str.slice(wordIdx)
}
else{ newWord = word
str.slice(wordIdx+1)}
answer.push(indexArr.indexOf(newWord)+1)
if(str[wordIdx]){
indexArr.push(word)
}
return strFn(newStr,indexArr,answer)
}
다시 푼 풀이