티스토리 뷰

알고리즘/C++

[C++] 아나그램 (Anangram)

지휘리릭 2020. 2. 24. 15:26

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

두 단어를 입력받고 아나그램인지 판별한다.

#include<stdio.h>
#include<algorithm>

int main() {
		// 대문자 (65 ~ 90)에는 -64. 소문자 (97 ~ 122)에는 -70을 하여 알파벳 52개의 int 배열 생성
	int str1Cnt[60] = { 0 };
	int str2Cnt[60] = { 0 };

	char str[100];
	scanf("%s", &str);

		// 문자의 아스키코드에 해당하는 인덱스에 카운팅
	for (int i = 0; str[i] != '\0'; i++) {
		if (str[i] >= 65 && str[i] <= 90) str1Cnt[str[i] - 64]++;
		else str1Cnt[str[i] - 70]++;
	}

	scanf("%s", &str);
	for (int i = 0; str[i] != '\0'; i++) {
		if (str[i] >= 65 && str[i] <= 90) str2Cnt[str[i] - 64]++;
		else if (str[i] >= 97 && str[i] <= 122) str2Cnt[str[i] - 70]++;
	}

		// 두 배열을 끝까지 비교해서 완전히 일치하면 아나그램 판별
	for (int i = 1; i <= 52; i++) {
		if (str1Cnt[i] != str2Cnt[i]) {
			printf("NO\n");
			exit(0);
		}
	}
	printf("YES\n");
	return 0;
}

대문자 + 소문자 총 52개의 알파벳을 담을 배열을 선언한다.

인덱스 1부터 52까지 연속적으로 배열을 구성하기 위해서 대문자에는 64를 빼고, 소문자에는 70을 뺀다.

 

문자열을 입력하면 '\0' 값이 나올 떄까지 for문 진행한다.

문자열에서 문자 하나씩 값을 가져와서 그에 맞는 알파벳 배열에 카운팅한다.

 

두 번째 문자열도 똑같이 진행한다.

 

두 알파벳 배열이 완전히 일치하는지 for문을 돌면서 확인한다.

댓글