Q. 주어진 2개의 String이 서로 Anagrams인지 확인하라 (Anagram - 철자 순서만 다르고, 같은 개수의 알파벳)
(단, 대문자, 공백 그리고 구두점은 제외한다)
--- Examples
anagrams('rail safety', 'fairy tales') --> True
anagrams('RAIL! SAFETY!', 'fairy tales') --> True
anagrams('Hi there', 'Bye there') --> False
Code
😢 RegExp, Object.keys().length 스킬을 사용하게 될지 예상하기 힘들었다.
😊 Solution 1)
Map을 생성해주는 function을 만들고, Object.keys().length를 이용해 사용된 철자의 종류가 동일한지 확인하고, for ... in을 이용해 사용된 철자의 개수가 동일한지 확인하여 문제를 해결한다.
Solution 2)
순서를 정렬하는 function을 만들고, 그 결과가 서로 같은지 확인하는 방법을 이용해 문제를 해결한다.
위의 2가지 방법에서 가장 중요한 것은 replace(/[^\w]/g, '')을 이용해 대문자, 공백 그리고 구두점을 제거해주는 것이다.
✔ replace(/[^\w]/g, '')
알파벳 외 문자를 제거한다.
✔ toLowerCase()
대문자를 소문자로 바꿔준다
✔ split('')
String을 separator기준으로 Array로 나눠서 저장해준다
✔ sort()
Array의 순서를 UTF-16 기준으로 정렬해준다
✔ join()
Array를 separator기준으로 String으로 합쳐준다
✔ Object.keys()
Object의 key만 Array 형식으로 받아볼 수 있다. 따라서 옆에 .length를 사용해 길이를 받아볼 수 있다
Full Code
function anagrams(stringA, stringB) { |
return cleanString(stringA) === cleanString(stringB); |
} |
function cleanString(str) { |
return str |
.replace(/[^\w]/g, '') |
.toLowerCase() |
.split('') |
.sort() |
.join(''); |
} |
// function anagrams(stringA, stringB) { |
// const aCharMap = buildCharMap(stringA); |
// const bCharMap = buildCharMap(stringB); |
// |
// if (Object.keys(aCharMap).length !== Object.keys(bCharMap).length) { |
// return false; |
// } |
// |
// for (let char in aCharMap) { |
// if (aCharMap[char] !== bCharMap[char]) { |
// return false; |
// } |
// } |
// |
// return true; |
// } |
// |
// function buildCharMap(str) { |
// const charMap = {}; |
// |
// for (let char of str.replace(/[^\w]/g, '').toLowerCase()) { |
// charMap[char] = charMap[char] + 1 || 1; |
// } |
// |
// return charMap; |
// } |
'Algorithm > JavaScript(Node.js)' 카테고리의 다른 글
Chunk(size만큼 sub array 잘라 넣기) Node.js(JavaScript) (0) | 2019.12.29 |
---|---|
백준 4344번: 평균은 넘겠지(It'll be above average) Node.js(JavaScript) (0) | 2019.12.28 |
백준 8958번: OX 퀴즈(OX Quiz) Node.js(JavaScript) (0) | 2019.12.27 |
The Classic FizzBuzz(3의 배수와 5의 배수 찾기) Node.js(JavaScript) (0) | 2019.12.27 |
Max Chars(가장 많이 쓰인 문자 찾기) Node.js(JavaScript) (0) | 2019.12.27 |