본문 바로가기

문제풀이/C++

[C++] Anagram

728x90

[목적]

Anagram : 길이가 같은 두 문자열이 알파벳의 나열 순서는 다르지만 알파벳 구성(대/소문자 구분)이 일치하면 두 단어는 Anagram이라 한다. 

두 문자열을 입력받아 Anagram이 맞으면 YES를 아니면 NO를 출력한다.

 

[입력 예제]

AbaAeCe
baeeACA

 

[출력 예제]

YES

 

첫 번째 문자열엔 'A'가 2개, 'C'가 1개, 'a'가 1개, 'b'가 1개, 'e'가 2개 있으며 두 번째 문자열도 그 개수가 같다.

그러므로 두 문자열은 Anagram 조건에 충족하여 YES를 출력하였다.


[코드]

#include <iostream>

using namespace std;

int main(void) {

    string a, b;
    int res = 1;
    
    cin >> a;
    cin >> b;
    
    for(int i=0; i<a.length(); i++){
        for(int j=0; j<a.length(); j++){
            if(a[i]==b[j]){
                //a[i] = '0';
                b[j] = '0';
                break;
            }
        }
    }
	
    for(int i=0; b[i]!='\0'; i++){
        if(b[i]!='0'){
            res = 0;
            break;
        }
    }
	
    if(res) cout << "YES";
    else cout << "NO";

    return 0;
}

1. 문자열 2개를 입력받는다.

2. 문자열 길이만큼의 2중 for문을 이용하여 a[i]번째와 b[j]번째가 일치하면 a또는 b의 해당 번째에 0을 넣어준다.

3. 일치했다면 안쪽 for문을 빠져나오며 문자열 길이만큼 반복해준다.

4. for문을 이용하여 b[i]번째가 모두 0이면 Anagram이니 res값이 1로 고정이고, 만약 하나라도 0이 아닐 시 Anagram이 아니니 res값을 0으로 바꿔주며 for문을 빠져나온다.

4. res값이 1이면 YES를 출력, 아니면 NO를 출력한다.

 

[실행결과]

728x90
반응형

'문제풀이 > C++' 카테고리의 다른 글

[C++] 층간소음  (0) 2021.01.05
[C++] 선생님 퀴즈  (0) 2021.01.02
[C++] 소수의 개수  (0) 2021.01.01
[C++] 뒤집은 소수  (0) 2020.12.30
[C++] 가장 많이 사용된 자릿수  (0) 2020.12.29