-
[프로그래머스/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) }
다시 푼 풀이
'코딩테스트' 카테고리의 다른 글
[프로그래머스/javascript] 오픈채팅방 (다시 풀어보기) (0) 2023.03.03 [프로그래머스/javascript] 피로도 (꼭!!! 다시풀기 못풀었음) (0) 2023.03.02 [백준/javascript] 1303 전투 (0) 2023.02.27 [백준/javascript] 2178 미로 (다시 풀기) (0) 2023.02.27 [프로그래머스/javascript] 프린터 (0) 2023.02.18