※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 6996번 문제인 애너그램이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/6996 

 

6996번: 애너그램

첫째 줄에 테스트 케이스의 개수(<100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 100을 넘지 않는 단어가 공백으로 구분되어서 주어진다. 단어는 알파벳 소문자로만 이루어

www.acmicpc.net

각 문자열을 구성하고 있는 각 알파벳의 개수가 서로 일치하는지를 확인하는 것으로 두 문자열이 애너그램 관계에 있는지 확인할 수 있다.

 

또다른 방법으로, 애너그램 관계에 있는 두 문자열은 각각을 정렬했을 때 같은 문자열이 나온다는 점을 이용해 간단히 문제를 해결할 수도 있다. (위의 풀이도 일종의 counting sort로 생각할 수도 있다.)

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <string>
#include <cstring>
using namespace std;

int cnt[128];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int T; cin >> T;
	while (T--) {
		memset(cnt, 0, sizeof(cnt));
		string s1, s2; cin >> s1 >> s2;
		for (auto l : s1) cnt[l]++;
		for (auto l : s2) cnt[l]--;
		bool chk = 1;
		for (auto x : cnt) if (x) chk = 0;
		if (chk) cout << s1 << " & " << s2 << " are anagrams.\n";
		else cout << s1 << " & " << s2 << " are NOT anagrams.\n";
	}
}
728x90

+ Recent posts