[문제 링크]

https://leetcode.com/problems/decode-the-message/description/

 

[문제 사고]

자료구조 해시 테이블,해시 맵을 사용해서 주어진 문자열의 각 인덱스에 상응하는 문자를 조합하여 정답을 반환한다.

 

[문제 해결]

1. a-z범위의 문자열을 임의의 변수를 선언하여 할당해준다.
2. 정답을 담을 변수와 Map 객체와 인덱스를 담을 변수 count를 선언해준다.
3. 주어진 key 값을 공백을 제외하고 분리하여 배열로 변환해준다.
4. 새로운 key 변수를 반복문을 통해 Map 객체에 key 값에 문자값을, value 값에 count 변수를 증가하면서 넣어준다.
5. 겹치는 문자가 없도록 예외처리를 함께 해준다.
6. message 변수를 반복문을 통해 돌면서 순차적으로 인덱스 값에 따라 영문자 문자열의 인덱스 값에 맞춰서 정답 변수에 넣어준다.
7. 공백이 있었다면 공백을 추가해주는 작업도 해준다.
8. 정답에 해당하는 변수를 반환한다.

 

[작성 코드]

/**
 * @param {string} key
 * @param {string} message
 * @return {string}
 */
var decodeMessage = function(key, message) {
    const eng = 'abcdefghijklmnopqrstuvwxyz';
    let answer = '';
    const newKey = key.split(' ').join('');
    const map = new Map();
    let count = 0;
    for(let value of newKey){
        if(!map.has(value)){
            map.set(value,count);
            count++
        }
    }
    for(let i = 0; i < message.length; i++){
        if(message[i] === ' '){
            answer += ' ';
            continue;
        }
        let index = map.get(message[i]);
        answer += eng[index];
    }
    return answer
};

 

[문제 회고]

예전에 사용했었던 해시 테이블과 해시 맵을 복습할 수 있는 문제였다. 단순히 문자열과 배열만을 사용해서 풀어보려 했지만 불필요한 메모리 사용과 시간 복잡도가 좋지 않을 것 같아 Map 객체를 사용하여 풀어보았다.

+ Recent posts