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