끄적끄적 코딩
article thumbnail

비슷한 단어를 찾는 문제입니다.

이루어진 구성요소가 같거나(개수도 동일)
같은 상태에서
하나의 문자를 바꿔서 같아지거나,
하나의 문자를 추가하거나,
하나의 문자를 빼서
같은 문자가 되면 비슷한 문자입니다.

문자를 배열에 개수를 저장해놓고
1. 길이가 2이상 다르거나,
2. 다른 문자가 3개이상이거나,
3. 다른 문자가 2개일 때 바꿔서 같을 수 있을 때
의 경우 카운트를 증가해줍니다.


#include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
#include <string>
using namespace std;

int main(int argc, char * argv[])
{
	int n;
	int index = 0;
	int count = 0;
	int dif = 0;
	int flag = 0;
	int xc;
	int yc;
	int alp[30];
	int comp[30];
	string s;

	memset(alp, 0, sizeof(alp));

	cin >> n;
	cin >> s;

	for (int i = 0; i < s.length(); ++i) {
		index = s[i] - 65;
		++alp[index];
	}
	--n;

	while(n--){
		memset(comp, 0, sizeof(comp));
		dif = 0;
		flag = 0;
		xc = 0;
		yc = 0;

		cin >> s;

		for (int i = 0; i < s.length(); ++i) {
			index = s[i] - 65;
			++comp[index];
		}
		for (int i = 0; i < 26; ++i) {
			if (alp[i] == comp[i]) {
				continue;
			}
			if (abs(alp[i] - comp[i]) > 1) {	// 2이상차이
				flag = 1;
				break;
			}
			else if (alp[i] < comp[i]) {
				++xc;
			}
			else if (alp[i] > comp[i]) {
				++yc;
			}
			if (xc > 1 || yc > 1) {
				flag = 1;
				break;
			}
		}
		if (flag == 1) {
			continue;
		}
		++count;
	}

	cout << count << endl;

	return 0;
}

검색 태그