본문 바로가기

문제 풀기/코딩인터뷰

[코딩인터뷰 완전정복] 1.2 순열 확인

Q : 문자열 두 개가 주어졌을 때 이 둘이 서로 순열 관계에 있는지 확인하는 메서드를 작성하라.

#include <iostream>

bool CheckIsPermutation(char* str1, char* str2, int len1, int len2);

int main() {
	
	std::ios_base::sync_with_stdio(false);

	char string1[100];
	char string2[100];

	std::cin.getline(string1, 99);
	std::cin.getline(string2, 99);
	

	printf("%d\n", CheckIsPermutation(string1, string2, strlen(string1), strlen(string2)));
}

bool CheckIsPermutation(char str1[], char str2[], int len1, int len2) {
	
	if (len1 != len2) return false;
	
	int alphabet[26];

	for (int i = 0; i < 26; i++) {
		alphabet[i] = 0;
	}

	for (int i = 0; i < len1; i++) {

		if (str1[i] <= 'Z' && str1[i] >= 'A') {
			str1[i] -= 'Z' - 'z';
		}
		if (str2[i] <= 'Z' && str2[i] >= 'A') {
			str2[i] -= 'Z' - 'z';
		}

		alphabet[str1[i] - 'a']++;
		alphabet[str2[i] - 'a']--;
	}
	
	for (int i = 0; i < 26; i++) {
		if (alphabet[i] != 0) {
			return false;
		}
	}

	return true;
}

두 문자의 길이가 다르다면 항상 false이다.

두 문자의 길이가 같을경우 알파벳을 담을 수 있는 크기가 26인 배열을 준비한다. (대문자는 소문자로 바꾼다.)

두 문자열의 문자들을 하나씩 읽어들여서 대응하는 문자의 갯수가 서로 같으면 순열이다.