article thumbnail image
Published 2022. 7. 14. 18:36
아나그램(해쉬)
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
 

📌작성코드

 
<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) {
          //sH에 문자열의 키가 없거나, sH의 키가 0이라면? : str1과 비교해서 키가 없거나 키가 0이면 두 문자열의 알파벳이 다른거니까 no
          return 'NO'
        } else {
          sH.set(x, sH.get(x) - 1); //기존의 문자열을 가지고 있으면 키를 -1빼주기. why? 하나씩 제거해서 결국엔 0이되면 두 문자열이 다른거니까 
        }
      }
      return answer;
    }
    let a = "abaCC";
    let b = "Caaab";
    console.log(solution(a, b));
  </script>
</body>

</html>

 

아나그램이란? 

문자열의 알파벳이 순서랑은 상관없이 구성요소가 똑같은 것을 말한다.

두개의 문자열에서 키:밸류 값을 저장시킨다음  구성요소를 비교해서 단어를 재배열하면 다른한쪽의 단어를

만들수있다면 'yes' 그렇지않으면 'no'를 반환한다.

 

우선 Map을 생성해준다음 for ...of 를 활용해준다.

Map과 set으로 비교할 기준이될 문자열(str1)을 초기세팅하고

두번째 반복문은 비교할 대상(str2)을 넣어준다.

 

조금 더 쉽게 이해해보면

처음 반복문으로 키:밸류값을 세팅해놓았다.

👇🏻(첫번째 반복문이 돌고 난 다음 키밸류 값)

str1 = 'abaCC'가 들어올 때,

key a b C
value 2 1 2

str2 = 'Caaab'가 들어올 때,

key a b C
value 3 1 1

두번째 반복문에서는 sH에 x(str2)가 없거나, 키가 0이라면 이라는 조건을 걸어준다.

x가 없다는말은 즉 abc중에 있는 문자열이 아닌, 새로운 문자열이 들어와있다는 말이니까 

바로 no를 리턴 시키면 되고

키가 0이라는 말은 abc중에 카운터가 0이되면 키를 가지고 있지않은 상태와 똑같으니까 

이경우에도 바로 no를 리턴시켜준다.

기존의 문자열을 가지고 있으면 키를 하나씩 빼서 0으로 만들어준다.

=> 0이되면 return되서 no가 출력되게끔 만들어주는 것이다.

'알고리즘' 카테고리의 다른 글

[알고리즘 문제] 5-6번  (0) 2022.07.13
[알고리즘 문제] 5-5번  (0) 2022.07.12
[알고리즘 문제] 5-4번  (0) 2022.06.21
[알고리즘 문제] 5-3번  (0) 2022.06.17
[알고리즘 문제] 5-2번  (0) 2022.06.17
복사했습니다!