https://programmers.co.kr/learn/courses/30/lessons/17684
function solution(msg) {
msg = msg.split('');
var answer = [];
const dict = [];
for (let i = 0; i < 26; i++) {
dict[i] = String.fromCharCode([i + 65]);
}
for (var count = 0; count < msg.length; count++) {
var currentEnter = msg[count];
var nextEnter = msg[count + 1];
while (dict.includes(currentEnter + nextEnter) && count < msg.length) {
count++;
currentEnter = currentEnter + nextEnter;
nextEnter = msg[count + 1];
}
answer.push(dict.indexOf(currentEnter) + 1);
dict.push(currentEnter + nextEnter);
}
return answer;
}
var msg = 'KAKAO';
console.log(solution(msg));
문제가 꼬인점이 있다. 맨처음 소개하는 압축 알고리즘을 적용하면 안되고, 이후에 나오는 예제의 진행방식을 꼼꼼하게 체크해야한다.
예제의 동작방식이 제일 중요하다.
처음에는 문제의 동작방식을 충실히 구현하도록 한다.
currentEnter, nextEnter, answer, dict 등
구현에 필요한 요소들을 작성하고 해당 요소들이 어떻게 변하는 지 관찰하며 구현한다.
처음 currentEnter와 nextEnter는 msg의 맨처음 요소와 그다음 요소이다.
사전에 currentEnter + nextEnter이 있다면 현재요소는 현재요소 + 그다음 요소이다.
(여기서 예제를 잘보면 어차피 다음요소는 한자리 문자일수 밖에 없다.)
여기서 count++ 하는 이유는 msg가 두칸이 넘어가기 때문이다.
nextEnter 는 currentEnter 다음요소이므로 currentEnter는 count 였으니까 + 1 한다. 아까 이미 count++을 했으니 총 2칸이 넘어간다.
count는 문자열의 길이를 넘길수 없다.
이제 currentEnter + nextEnter이 사전에 없는 상황이 발생한다면
현재 입력을 추가하고 사전에 추가한다.
문제의 예제 방식을 이해하고 구현하면 된다.
객체.속성
이고 해당 속성이 없는 경우는 객체.속성 === undefinded
형태로 나온다.