코테 - 애너그램 판별

aydennote·2023년 5월 1일
0

Coding_TEST

목록 보기
4/6
post-thumbnail

🕵️‍♀️ 애너그램(anagram)이란?
단어나 문장을 구성하고 있는 문자의 순서를 바꾸어 다른 단어나 문장을 만드는 것이다.
예를 들어, Listen, Silent 가 애너그램이라고 할 수 있다.

1. split, sort, join

const strA = 'listen';
const strB = 'silent';

strA, strB에 각각 문자열이 할당되어 있을 때, split(''), sort(), join()을 이용해 동일한 문자열인지 판단할 수 있다.

	const strA = 'listen';
	const strB = 'silent';
	function checkAnagram(strA, strB) {
		if (strA.length !== strB.length) {
			return false;
		}
		return strA.split('').sort().join() === strB.split('').sort().join();
    }
	console.log(checkAnagram(strA, strB));

checkAnagram 함수에서 각 문자열의 길이가 같은지 확인하고 split('')으로 배열로 만들고 sort() 를 통해 알파벳 순서로 정렬한다. 다시 join() 을 사용해 문자열로 만들게 되면 strA와 strB가 알파벳 순서로 정렬된 문자가 만들어지는데 서로 같다면 애너그램이라고 할 수 있다. 결국 함수가 true를 반환하면 애너그램, false라면 해당하지 않는다.

2. 객체

const strA = 'listen';
const strB = 'silent';

strA, strB에 각각 문자열이 할당되어 있을 때, 객체를 이용해 애너그램인지 판단할 수 있다.

	const strA = 'listen';
	const strB = 'silent';
	const obj = {};
	function checkAnagram(strA, strB) {
		if (strA.length !== strB.length) {
			return false;
		}
		for (const char of strA) {
			obj[char] = obj[char] ? obj[char]++ : 1;
		}
		for (const char of strB) {
			if (!obj[char]) return false;
			obj[char]--;
		}
		return true;
	}
	console.log(checkAnagram(strA, strB));

checkAnagram 함수 안에서 두 문자열의 길이를 비교하는 것은 동일하다.
이후 반복문이 두개 존재하는데 strA 반복문은 객체 key(문자) 값이 있을 경우, value를 1증가시키고 없을 경우 1로 저장한다.
strB 반복문에서는 key(문자) 값이 있을 경우 value를 1 감소시키고 value가 0 또는 음수일 때 false를 반환한다.

profile
기록하는 개발자 Ayden 입니다.

0개의 댓글