문제
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 |