Programmers - [3차] 압축

Doodream·2021년 4월 6일
0

코딩테스트

목록 보기
19/22
post-thumbnail

💻 [3차] 압축


❓ 문제

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이 사전에 없는 상황이 발생한다면
    현재 입력을 추가하고 사전에 추가한다.

문제의 예제 방식을 이해하고 구현하면 된다.

배운점

  • 자바스크립트에는 dictionary 자료형이 딱히 없어서 객체에 속성을 추가해서 만든다. 접근하는 방식은 객체.속성이고 해당 속성이 없는 경우는 객체.속성 === undefinded 형태로 나온다.
profile
일상을 기록하는 삶을 사는 개발자 ✒️ #front_end 💻

0개의 댓글