728x90
반응형
References
아래 링크의 강의 중 Section 9. Anagrams
의 내용을 추려 이번 글을 작성하였습니다.
The Coding Interview Bootcamp: Algorithms + Data Structures on Udemy
Solution 1. simpler ver. with RegExp
// my solution
function anagrams(stringA, stringB) {
const sortedStringA = stringA.split("").sort().join("").toLowerCase();
const sortedStringB = stringB.split("").sort().join("").toLowerCase();
return sortedStringA === sortedStringB;
}
console.log(anagrams("RAIL! SAFETY!", "fairy tales"));
// simpler ver. with RegExp
function anagrams(stringA, stringB) {
return cleanString(stringA) === cleanString(stringB);
}
function cleanString(str) {
return str.replace(/[\W]/g, "").toLowerCase().split("").sort().join("");
}
console.log(anagrams("RAIL! SAFETY!", "fairy tales"));
내가 짠 코드는 console 창과 test.js의 결과값이 불일치하여 정규식을 활용한 모범답안을 기준으로 설명하겠다. sort()
method로 문자열을 알파벳순으로 정리한 다음 비교한다는 접근 방식은 비슷하지 싶다.
- 함수
cleanString
에서 정규식replace(/[\W]/g, "")
을 거쳐 문자열str
에서 특수문자를 제거한 다음, 문자열을 알파벳순으로 정렬 - 함수
anagrams
를 통해 문자열stringA
와stringB
를 비교하여 일치하면true
, 불일치하면false
를 반환.
Solution 2. with for...in & if & RegExp
function anagrams(stringA, stringB) {
const aCharMap = buildCharMap(stringA);
const bCharMap = buildCharMap(stringB);
// obj aCharMap의 key 개수와 bCharMap의 key 개수가 다르면 false 반환(다른 문자가 섞여 있다는 뜻)
if (Object.keys(aCharMap).length !== Object.keys(bCharMap).length) {
return false;
}
// obj aCharMap의 value of key와 bCharMap의 value of key를 비교해서 다르면 false(문자열 내 각 문자의 등장횟수)
for (let char in aCharMap) {
if (aCharMap[char] !== bCharMap[char]) {
return false;
}
}
return true;
}
function buildCharMap(str) {
const charMap = {};
// str을 RegExp 활용하여 특수문자, 공백, 숫자 등을 ""으로 치환하고 소문자로 반환
for (let char of str.replace(/[\W]/g, "").toLowerCase()) {
// obj charMap에 char를 key로 할당하고 새로운 값이면 '1', 존재하던 값이면 1을 증가
charMap[char] = charMap[char] + 1 || 1;
}
return charMap;
}
console.log(anagrams("RAIL! SAFETY!", "fairy tales"));
위 이미지를 보면 알 수 있듯 함수 buildCharMap
을 거쳐 생성된 두 객체 aCharMap
과 bCharMap
를 비교하여 boolean
값을 반환.
함께보기
728x90
반응형
'👩💻 Programming > Coding Test 문제 풀이' 카테고리의 다른 글
별 찍기(Printing Stars) (0) | 2022.04.04 |
---|---|
첫 글자 대문자로 만들기(Sentence Capitalization) (0) | 2022.04.04 |
배열 잘라내기(Array Chunking) (0) | 2022.04.04 |
fizzBuzz (0) | 2022.04.04 |
문자열 내 최빈값 구하기(MaxChars) (0) | 2022.04.04 |
댓글