문제풀이/백준oj

[백준OJ] 6996번 애너그램

Hyeon-Uk 2021. 7. 22. 20:12
반응형

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

 

6996번: 애너그램

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

www.acmicpc.net


 

 

-풀이-

1. A와 B를 입력받는다.

2. A와 B의 길이가 다르면, 순서를 바꾼다해도 못만들기때문에 NOT을 출력해준다.

3. A와 B를 돌면서 A와 B에 각 알파벳들이 몇번씩 나오는지 따로따로 체크해준다.

4. A와 B를 구성하는 각각의 알파벳 개수가 모두 일치하면 TRUE, 아니면 FALSE에 해당하는 답을 출력해준다.

 

-코드-

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

string a, b;
int n;

int main(){
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> a >> b;
		if (a.size() != b.size()) {
			cout << a << " & " << b << " are NOT anagrams.\n";
		}
		else {
			int cntA[26] = { 0 };
			int cntB[26] = { 0 };
			bool flag = true;
			int len = a.size();
			for (int j = 0; j < len; j++) {
				cntA[a[j] - 'a']++;
				cntB[b[j] - 'a']++;
			}
			for (int j = 0; j < 26; j++) {
				if (cntA[j] != cntB[j]) {
					flag = false;
					break;
				}
			}


			if (flag) {
				cout << a << " & " << b << " are anagrams.\n";
			}
			else {
				cout << a << " & " << b << " are NOT anagrams.\n";
			}
		}
	}
	return 0;
}
반응형