본문 바로가기

Algorithm/String

(C++) - 백준(BOJ) 6996번 : 애너그램

반응형

www.acmicpc.net/problem/6996

 

6996번: 애너그램

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

www.acmicpc.net

간단한 문자열 처리 문제였습니다.

풀이방법

 1. 입력 받은 두개의 문자열 a,b의 알파벳을 세줍니다.

 2. 세준 결과가 같다면 위치를 바꿔서 서로의 문자열로 만들 수 있습니다. 즉 애너그램이 가능합니다.

 

 

Code

#include <bits/stdc++.h>
using namespace std;
int * getAlpha(string &a, int arr[]){
    for(int i = 0; i < 26; i++) arr[i] = 0;
    for(int i = 0; i < a.size(); i++) arr[a[i]-'a']++;
    return arr;
}

bool isAnagram(int *alpha,int *alpha2){
    for(int i = 0; i < 26; i++)
        if(alpha[i] != alpha2[i]) 
            return false;
    return true;
}

int main(){
    int testCase;
    cin >> testCase;
    while(testCase--){
        string a,b;
        cin >> a >> b;
        int cnt[26], cnt2[26];
        int *alpha = getAlpha(a,cnt);
        int *alpha2 = getAlpha(b,cnt2);
        if(isAnagram(alpha,alpha2))
            cout << a << " & " << b << " are anagrams.\n";
        else
            cout << a << " & " << b << " are NOT anagrams.\n";
    }   
}