Study

Anagram

show2888 2019. 8. 22. 02:20
반응형

16. Anagram(아나그램 : 구글 인터뷰 문제)

 

Anagram이란 두 문자열이 알파벳의 나열 순서를 다르지만 그 구성이 일치하면 두 단어는 아

나그램이라고 합니다.

예를 들면 AbaAeCe 와 baeeACA 는 알파벳을 나열 순서는 다르지만 그 구성을 살펴보면

A(2), a(1), b(1), C(1), e(2)로 알파벳과 그 개수가 모두 일치합니다. 즉 어느 한 단어를 재

배열하면 상대편 단어가 될 수 있는 것을 아나그램이라 합니다.

길이가 같은 두 개의 단어가 주어지면 두 단어가 아나그램인지 판별하는 프로그램을 작성하세

요. 아나그램 판별시 대소문자가 구분됩니다.

 

입력설명

첫 줄에 첫 번째 단어가 입력되고, 두 번째 줄에 두 번째 단어가 입력됩니다.

단어의 길이는 100을 넘지 않습니다.

 

출력설명

두 단어가 아나그램이면 “YES"를 출력하고, 아니면 ”NO"를 출력합니다.

 

입력예제 1

AbaAeCe

baeeACA

 

출력예제 1

YES

 

//아스키코드를 이용하거나 이중for문을 돌면서 직접 찾는방법이있다.

 

<아스키코드 이용 코드>

#include <iostream>

using namespace std;
int main()
{
    string a, b;
    cin >> a >> b;
    int arr[53] = {
        0,
    };
    int arr2[53] = {
        0,
    };

    for (int i = 0; a[i] != '\0'; i++)
    {
        if (a[i] >= 65 && a[i] <= 90)
        {
            arr[a[i] - 64]++;
        }
        else
        {
            arr[a[i] - 70]++;
        }
    }

    for (int i = 0; b[i] != '\0'; i++)
    {
        if (b[i] >= 65 && b[i] <= 90)
        {
            arr2[b[i] - 64]++;
        }
        else
        {
            arr2[b[i] - 70]++;
        }
    }

    for (int i = 1; i <= 52; i++)
    {
        if (arr[i] != arr2[i])
        {
            cout << "NO";
            exit(0);
        }
    }

    cout << "YES";
}

 

 

<이중 for문 이용 코드>

#include <iostream>

using namespace std;

int main()
{
    string a, b;
    int cnt;
    cin >> a >> b;
    cnt = a.size();
    for (int i = 0; a[i] != '\0'; i++)
    {
        for (int j = 0; b[j] != '\0'; j++)
        {
            if (a[i] == b[j])
            {
                b[j] = '$';
                cnt--;
            }
        }
    }

    if(cnt==0) cout << "YES";
    else cout << "NO";
}
반응형

'Study' 카테고리의 다른 글

온도의 최대값  (0) 2019.08.22
소수의 개수  (0) 2019.08.22
가장 많이 사용된 자릿수  (0) 2019.08.22
숫자의 총 개수  (0) 2019.08.14
모두의 약수(제한시간 1초)  (0) 2019.08.13