본문 바로가기

CodingTest Exam/[C++] Algorithm Study

16. Anagram (it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비) ★☆☆☆☆

#include<stdio.h>

char a[100];
char b[100];
int c[52];
int d[52];
int main(){
	scanf("%s", &a);
	scanf("%s", &b);
	
	bool flag = true;
	for(int i = 0; i < 100; i++)
	{
		int idx_a, idx_b = 0;
		if(a[i] >= 65 && a[i] <= 90)
		{
			int idx_a = a[i] - 65;
			c[idx_a]++;
		}
		else if(a[i] >= 97 && a[i] <= 122)
		{
			int idx_a = a[i] - 97 + 26;
			c[idx_a]++;
		}
		
		if(b[i] >= 65 && b[i] <= 90)
		{
			int idx_b = b[i] - 65;
			d[idx_b]++;
		}
		else if(b[i] >= 97 && b[i] <= 122)
		{
			int idx_b = b[i] - 97 + 26;
			d[idx_b]++;
		}
	}
	
	for(int i = 0; i < 52; i++)
	{
		if(c[i] != d[i])
			flag = false;
	}
	
	if(flag)
		printf("%s", "YES");
	else
		printf("%s", "NO");
}

1. 문자열을 입력받아서 각각 a, b 배열에 저장한다.

2. a, b 배열의 원소들을 확인하면서 대문자면 0~25까지(A-Z), 소문자면 26~52(a-z) 까지 인덱스를 부여해서

c, d 배열의 해당 인덱스의 값을 증가시켜준다.

3. c, d 배열이 서로 같다면 같은 구성의 문자로 보고 YES를 출력한다.

 

알파벳의 범위(아스키 코드)

A - Z = 65 - 80

a - z = 97 - 122