해쉬 - 아나그램
2024. 2. 4. 00:16ㆍ알고리즘
두 문자열이 주어지고 아나그램을 찾는 문제이다.
예를 들면 AbaAeCe 와 baeeACA 는 알파벳을 나열 순서는 다르지만 그 구성을 살펴보면 A(2), a(1), b(1), C(1), e(2)로 알파벳과 그 개수가 모두 일치한다. 즉 어느 한 단어를 재배열하면 상대편 단어가 될 수 있는 것을 아나그램이라 한다.
문제 자체는 어렵지 않다. 처음에는 Object를 활용해서 해쉬를 구현했지만 Map을 활용하면 다양한 키값을 활용할 수 있고, Object를 사용하는 것보다 has, get과 같은 Map 자료형에서만 사용할 수 있는 메서드로 코드의 의도를 더 선명하게 드러낼 수 있다.
function solution2(str1, str2) {
let result = 'YES';
let sH = new Map();
for (const x of str1) {
if (sH.has(x)) sH.set(x, sH.get(x) + 1);
else sH.set(x, 1);
}
for (const x of str2) {
if (!sH.has(x) || sH.get(x) === 0) return 'NO';
sH.set(x, sH.get(x) - 1);
}
return result;
}
let a = 'AbaAeCe';
let b = 'baeeACA';
console.log(solution2(a, b));
처음에는 str1의 Map과 str2의 Map을 따로따로 만들어서 비교하는 방법으로 코드를 구현했다.
하지만 str1의 Map을 만들고, str2의 요소를 순회하면서 일치하면 Map의 value를 차감하는 방법으로 일치여부를 확인하면 굳이 Map을 두 개 만들지 않아도 된다.
'알고리즘' 카테고리의 다른 글
개념 정리 - 선택, 버블, 삽입 정렬 (0) | 2024.02.05 |
---|---|
해쉬, 슬라이딩 윈도우, 투 포인터 - 모든 아나그램 찾기 (1) | 2024.02.04 |
큐 구현하기 - 연결리스트 (1) | 2024.02.02 |
브루트 포스 - 체스판 다시 칠하기 (0) | 2024.01.30 |
문자열 탐색 - 가장 짧은 문자거리 (0) | 2024.01.20 |