※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 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
'BOJ' 카테고리의 다른 글
[BOJ 2210 // C++] 숫자판 점프 (0) | 2022.03.18 |
---|---|
[BOJ 24420 // C++] ピアノコンクール (Piano Competition) (0) | 2022.03.17 |
[BOJ 2485 // C++] 가로수 (0) | 2022.03.15 |
[BOJ 1415 // C++] 사탕 (0) | 2022.03.14 |
[BOJ 2847 // C++] 게임을 만든 동준이 (0) | 2022.03.13 |