5-7) 아나그램(해쉬)

김예지·2021년 9월 2일
1

문제

Anagram이란 두 문자열이 알파벳의 나열 순서를 다르지만 그 구성이 일치하면 두 단어는 아나그램이라고 합니다.
예를 들면 AbaAeCe 와 baeeACA 는 알파벳을 나열 순서는 다르지만 그 구성을 살펴보면 A(2), a(1), b(1), C(1), e(2)로 알파벳과 그 개수가 모두 일치합니다. 즉 어느 한 단어를 재 배열하면 상대편 단어가 될 수 있는 것을 아나그램이라 합니다.
길이가 같은 두 개의 단어가 주어지면 두 단어가 아나그램인지 판별하는 프로그램을 작성하세 요. 아나그램 판별시 대소문자가 구분됩니다.
[입력설명]
첫 줄에 첫 번째 단어가 입력되고, 두 번째 줄에 두 번째 단어가 입력됩니다. 단어의 길이는 100을 넘지 않습니다.
[출력설명]
두 단어가 아나그램이면 “YES"를 출력하고, 아니면 ”NO"를 출력합니다.

입력예제 1

AbaAeCe baeeACA

출력예제 1

YES

입력예제 2

abaCC
Caaab

출력예제 2

NO


문제 풀이

예습 이론

  • 아나그램: 두개의 문자열이 알파벳의 나열 순서는 다르지만 구성이 일치하면 두 문자열은 아나그램이라고 한다.

코드

  • 만약, 문제에서 '길이가 같은'이 없었다면, 길이가 다른 문자열이 들어올 수 있다는 말이다. 이 경우, 아나그램인지 확인 전에 길이 비교를 해서 다르면 "NO"를 해주면 된다.
  • 하나의 단어(str1)를 sH에 해쉬 맵 처리해준다. str2와 sH를 비교한다. key가 존재하면 해당 key의 value를 -1해주고, key가 존재하지 않거나 key의 value=0이라면 아나그램이 아니다. 즉, answer="NO"를 대입한다. 마지막에 answer을 리턴해준다.
<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(str1, str2){
                let answer="YES"; 
                let sH =new Map();
                for(let x of str1){
                    if(sH.has(x)) sH.set(x, sH.get(x)+1);
                    else sH.set(x, 1);
                }
                //console.log(sH);
                for(let x of str2){
                    if(!sH.has(x) || sH.get(x)===0) answer="NO";
                    else sH.set(x, sH.get(x)-1);
                }
                return answer;
            }
            
            let a="AbaAeCe"; 
            let b="baeeACA"; 
            console.log(solution(a, b));
        </script>
    </body>
</html>
profile
내가 짱이다 😎 매일 조금씩 성장하기🌱

2개의 댓글

comment-user-thumbnail
2021년 9월 12일

9/12

답글 달기
comment-user-thumbnail
2021년 9월 13일

9/13

답글 달기