알고리즘 문제 풀이

[TIL] Javascript 알고리즘 100일 챌린지 20번째 도전

whale3 2023. 5. 21. 20:40

두 가지 문자열이 주어졌을때 서로 anagram인지 판별하는 문제다. 문자열의 각 문자 순서만 다르고 문자 구성은 같은것을 anagram이라고 한다. olleh와 hello 처럼..

 

1. split, sort, join 으로 각 문자열을 정렬해주고 두 문자열이 같은지 확인

2. 해쉬맵을 이용하여 첫번째 문자열에 등장하는 문자의 빈도수를 기록한뒤 두 번째 문자열에서 각 문자를 하나씩 보면서 해쉬맵에서 찾을때마다 빈도수를 1씩 뺀다. 만약 해쉬맵에 없는 문자가 등장하거나 해쉬맵에 있어도 빈도수가 이미 0이면 anagram이 아니게 된다. 

 

function splitSortAndJoin(str) {
    return str.split('').sort().join('');
}
 
function solution(before, after) {
    return splitSortAndJoin(before) === splitSortAndJoin(after) ? 1 : 0;
}

 

 

function isAnagram(before, after) {
    const hashMap = {}
    for(char of before) {
        if(!hashMap[char]) {
            hashMap[char] = 1
        } else {
            hashMap[char] ++
        }
    }
    
    for(char of after) {
        if(!hashMap[char]) {
            return false
        } else {
            hashMap[char] --
        }
    }
    return true
}

function solution(before, after) {
    return isAnagram(before, after) ? 1 : 0
}

 

https://youtu.be/IVH7t5lQfjc

 

반응형