LeetCode - 804. Unique Morse Code Words

henu·2023년 9월 5일
0

LeetCode

목록 보기
54/186

Solution

var uniqueMorseRepresentations = function(words) {
    const morse = [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."];

    const converted = words.map(word => [...word].map(e => morse[e.charCodeAt()-97]).join(''))

    const obj = {};
    let output = 0;

    for(ele of converted) {
        if(!obj[ele]) {
            obj[ele] = 1
            output++
        }
    }

    return output;
};

Explanation

처음에 좀 헤매어서 생각보다 오래 걸린 문제였다.
문제에서 알파벳 a 부터 z 까지의 모스 부호를 배열로 제공해주었다. 여기서 문제는 모스부호가 알파벳 순서대로 배열에 담겨있다는 것이다. 즉, 인덱스로만 접근이 가능하다는 것이다.
이 모스 부호와 알파벳을 1대1로 매핑해서 객체에 담아도되지만 그렇게 하지않고 필자는 charCodeAt 메소드를 사용했다.
이 메소드는 문자열에 해당하는 유니코드값(정수)를 리턴한다.
그래서 a ~ z 의 유니코드값은 97 ~ 122이다. 즉, 유니코드값에서 -97를 하면 0 ~ 25로 인덱스로 접근이 가능하다.
이를 이용해서 words 배열을 모스 부호로 전환한 다음 객체를 이용해서 같은 형태의 모스 부호를 걸러주면 된다.

0개의 댓글