궤도

[EPPER] 12회 6번 본문

💻 현생/⛓ 알고리즘

[EPPER] 12회 6번

영이오 2020. 10. 9. 17:27

문제

 

 


풀이

 

하나의 문자열을 다른 문자열로 바꾼다고 생각하지 말고, 두 문자열을 모두 제 3의 문자열로 바꿔버린다고 생각하면 쉬워진다. 제 3의 문자열은 바로 알파벳을 사전순으로 정렬한 모습이다.

 

sort_arr 함수에서 각각의 문자열을 사전순으로 정렬한다. 각각의 문자열에 대문자가 있기도 하니 일단 대문자들을 전부 소문자로 바꿔준다. 아스키 코드를 참고했다. 가공을 끝낸 뒤 삽입 정렬을 했다. 왜 맨날 삽입 정렬만 하냐면 유일하게 외운 정렬 코드가 저거라서...

마지막으로 사전순 정렬한 각 문자열을 서로 비교해주면 끝난다.


소스코드

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

void sort_arr(char* str, int length) {
	for (int i = 0; i < length; i++) {
		if (str[i] >= 'A' && str[i] <= 'Z') {
			str[i] += 32;
		}
	}
	for (int i = 1; i < length; i++) {
		char temp = str[i];
		int j = i - 1;
		while (j >= 0 && str[j] > temp) {
			str[j + 1] = str[j];
			j--;
		}
		str[j + 1] = temp;
	}
}

int main() {
	char source[101];
	char dest[101];

	scanf("%s %s", &source, &dest);
	int s_length = strlen(source);
	int d_length = strlen(dest);
	sort_arr(source, s_length);
	sort_arr(dest, d_length);
	if (strcmp(source, dest) == 0) //문자열 일치하는지 확인
		printf("Yes\n");
	else
		printf("No\n");
}
Comments