알고리즘/it 취업을 위한 알고리즘 문제풀이

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

고줭 2021. 5. 17. 12:56

문제

Anagram이란 두 문자열이 알파벳의 나열 순서를 다르지만 그 구성이 일치하면 두 단어는 아 나그램이라고 합니다. 예를 들면 AbaAeCe 와 baeeACA 는 알파벳을 나열 순서는 다르지만 그 구성을 살펴보면 A(2), a(1), b(1), C(1), e(2)로 알파벳과 그 개수가 모두 일치합니다. 즉 어느 한 단어를 재 배열하면 상대편 단어가 될 수 있는 것을 아나그램이라 합니다. 길이가 같은 두 개의 단어가 주어지면 두 단어가 아나그램인지 판별하는 프로그램을 작성하세 요. 아나그램 판별시 대소문자가 구분됩니다.

입력설명

첫 줄에 첫 번째 단어가 입력되고, 두 번째 줄에 두 번째 단어가 입력됩니다.
단어의 길이는 100을 넘지 않습니다.

출력설명

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

입력예제

AbaAeCe
baeeACA

출력예제

YES


#include <stdio.h>
#include <algorithm>
using namespace std;
int a[60], b[60];

int main(){
	//freopen("input.txt", "rt", stdin);
	char str[101]; // A~Z 65~90, a~z 97~122
	int i;
	scanf("%s", &str);
	
	for(i=0; str[i]!='\0'; i++){
		if(str[i]>=65 && str[i]<=90){
			a[str[i]-48]++;
		} else{
			a[str[i]-70]++;
		}
	}
	scanf("%s", &str);
	for(i=0; str[i]!='\0'; i++){
		if(str[i]>=65 && str[i]<=90){
			b[str[i]-48]++;
		} else{
			b[str[i]-70]++;
		}
	}
	
	for(i=1; i<=52; i++){
		if(a[i]!=b[i]){
			printf("NO");
			exit(0);
		} 
	}
	printf("YES");
	
	return 0;
}

첫번째 입력값을 받고 int a배열에 1~26까지 대문자 아스키코드를 해당 인덱스에 카운팅을 해줍니다. 소문자는 27~52 까지 아스키코드를 카운팅해줍니다. 
대문자 아스키코드는 65~90이므로 -64를 해주면 1~26 소문자는 97~122 이므로 -70해주면됩니다.

두번째 입력값도 똑같이한후에 마지막 for문으로 a[i]!=b[i] 참인지 거짓인지 판별후에 거짓인경우 NO를 출력하고 exit(0) 함수를 사용해서 프로그램을 종료합니다.
그동안 #include <algorithm>은 sort할때만 써왔는데 이런기능도 있었네용

'알고리즘 > it 취업을 위한 알고리즘 문제풀이' 카테고리의 다른 글

18. 층간소음  (0) 2021.05.17
17. 선생님 퀴즈  (0) 2021.05.17
15. 소수의 개수  (0) 2021.05.17
14. 뒤집은 소수  (0) 2021.05.17
13. 가장 많이 사용된 자릿수  (0) 2021.05.15