문자열 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))을 고려할 수 있습니다.