Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 두 문자열이 서로의 아나그램(Anagram)인지 확인하는 방법

문자열 a와 문자열 b가 주어졌을 때, 두 문자열이 서로의 아나그램(anagram) 관계인지 판별하고 그 결과를 참(True)/거짓(False)으로 반환하는 프로그램을 작성해 보겠습니다. 아나그램이란 두 문자열이 사용하는 문자의 종류와 개수가 완전히 동일하되, 순서만 다른 경우를 의미합니다.

예제 입력과 출력

입력-1

String a= "india"
String b= "nidia"

출력

True

설명 − 문자열 'b'가 문자열 'a'에 포함된 모든 문자를 동일하게 가지고 있으므로 두 문자열은 아나그램 관계이며, 결과는 True입니다.

입력-2

String a= "hackathon"
String b= "achcthoon"

출력

False

설명 − 문자열 'b'에 문자열 'a'의 모든 문자가 포함되어 있지 않으므로 두 문자열은 아나그램이 아니며, 결과는 False입니다.

문제 해결 접근 방식

주어진 문자열 'a'와 'b'에 대해 먼저 두 문자열의 길이가 같은지 확인한 뒤, 각 문자열을 정렬하여 비교합니다. 정렬 후 두 문자열이 완전히 같다면 "True"를 반환하고, 그렇지 않다면 "False"를 출력합니다.

  • 두 개의 문자열 'a'와 'b'를 입력으로 받습니다.

  • checkStringsAnagram(string a, string b) 함수를 정의합니다. 이 함수는 두 문자열이 서로의 아나그램일 경우 true를, 아니면 false를 반환합니다.

  • 두 문자열의 길이를 구하고, 길이가 서로 같은지 비교합니다. 길이가 다르면 아나그램일 수 없습니다.

  • 두 문자열을 각각 사전순(lexicographical order)으로 정렬한 뒤, 정렬된 결과가 동일한지 확인합니다.

  • 비교 결과에 따라 true 또는 false를 반환합니다.

구현 예제 코드

function checkStringsAnagram(a, b) {
    let len1 = a.length;
    let len2 = b.length;
    if(len1 !== len2){
        console.log('Invalid Input');
        return
    }
    let str1 = a.split('').sort().join('');
    let str2 = b.split('').sort().join('');
    if(str1 === str2){
        console.log("True");
    } else { 
        console.log("False");
    }
}
checkStringsAnagram("indian","ndiani")

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

True

문자열 'indian'과 'ndiani'는 동일한 문자 집합을 가지고 있으며 순서만 다르기 때문에, 두 문자열은 서로의 아나그램입니다. 따라서 결과로 True가 반환됩니다.

이 방식의 시간 복잡도는 문자열 정렬에 의해 결정되며, 일반적으로 O(n log n)입니다. 만약 더 효율적인 구현이 필요하다면, 각 문자의 등장 횟수를 객체나 Map에 저장해 비교하는 빈도수(counting) 기반 방식(O(n))을 고려할 수 있습니다.