*Udemy의 "The Coding Interview Bootcamp: Algorithms + Data Structures" 강의에서 학습한 내용을 정리한 포스팅입니다.
*https://soldonii.github.io에서 작성한 글을 티스토리로 옮겨온 포스팅입니다.
*자바스크립트를 배우는 단계라 오류가 있을 수 있습니다. 틀린 내용은 댓글로 말씀해주시면 수정하겠습니다. 감사합니다. :)
지문
/ Check to see if two provided strings are anagrams of eachother.
// One string is an anagram of another if it uses the same characters
// in the same quantity. Only consider characters, not spaces
// or punctuation. Consider capital letters to be the same as lower case
// --- Examples
// anagrams('rail safety', 'fairy tales') --> True
// anagrams('RAIL! SAFETY!', 'fairy tales') --> True
// anagrams('Hi there', 'Bye there') --> False
1번 풀이
1. 각 string에 대해서 charMap을 만들 함수를 구현한다.
1-1. 빈 객체를 만든다.
1-2. 문제의 조건에 맞는 문자열만 남기기 위해 정규표현식을 사용한다. 이후 toLowerCase() 한 값을 str 로 저장한다.
1-3. for loop을 통해 charMap을 만든다.
2. 두 argument 모두에 대해서 만들어진 charMap을 변수에 저장한다.
3. 두 객체의 key(또는 value)의 길이가 다르다면, 애초에 같은 문자가 사용된 것이 아니므로 false.
4. 길이가 같을 경우, 두 객체에서 같은 key(여기에서는 character)에 대한 value를 구했을 때 값이 다르면, 같은 문자열이 사용된 횟수가 각각 다르다는 의미이므로 false. 그렇지 않을 경우에는 true.
function anagrams(stringA, stringB) {
const charMapA = makeCharMap(stringA);
const charMapB = makeCharMap(stringB);
if (Object.keys(charMapA).length !== Object.keys(charMapB).length) {
return false;
}
for (let char in charMapA) {
if (charMapA[char] !== charMapB[char]) {
return false;
} else {
return true;
}
}
}
function makeCharMap(str) {
let charMap = {};
str = str.replace(/[^\w]/g, "").toLowerCase();
for (let char of str) {
charMap[char] = charMap[char] + 1 || 1;
}
return charMap;
}
2번 풀이 : sort()
1. 문자열을 원하는 방식대로 sort하는 기능의 function을 만든다.
1-1. 원본 문자열을 조건에 맞게 공백 및 특수문자를 제거한 후 소문자로 다 바꿔준다.
1-2. 바꾼 문자열을 split으로 배열로 바꿨다가, sort를 하고, 다시 join하여 문자열로 바꿔준다.
2. sort를 동일하게 했기 때문에 만약 같은 문자열이 같은 횟수만큼 사용되었다면, 최종 문자열도 같을 것이다.
function anagrams(stringA, stringB) {
return cleanString(stringA) === cleanString(stringB);
}
function cleanString(str) {
return str = str.replace(/[^\w]/g, "").toLowerCase().split('').sort().join('');
}
'Javascript 공부 > 알고리즘 풀이' 카테고리의 다른 글
자바스크립트 알고리즘(6) - reverseInt (0) | 2019.08.26 |
---|---|
자바스크립트 알고리즘(5) - palindrome (0) | 2019.08.26 |
자바스크립트 알고리즘(4) - maxChar (0) | 2019.08.26 |
자바스크립트 알고리즘(3) - fizzbuzz (0) | 2019.08.26 |
자바스크립트 알고리즘(2) - chunk (0) | 2019.08.26 |
댓글