반응형

https://www.acmicpc.net/problem/2607

 

2607번: 비슷한 단어

첫째 줄에는 단어의 개수가 주어지고 둘째 줄부터는 한 줄에 하나씩 단어가 주어진다. 모든 단어는 영문 알파벳 대문자로 이루어져 있다. 단어의 개수는 100개 이하이며, 각 단어의 길이는 10 이

www.acmicpc.net

 

먼저 두 단어의 알파벳 개수를 초기화해주고, 각 알파벳 개수의 차이의 합을 구해줍니다.

길이가 같을 때는, 차이가 2 이하라면 비슷한 단어입니다. (1개 치환하면, 2만큼 차이)

길이가 다를 때는, 차이가 1 이하라면 비슷한 단어입니다.

 

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>

char buf[11];
int n, alp1[26] = { 0 }, alp2[26] = { 0 }, ans = 0, diff;

void init(char* s, int* alp) {
	for (int i = 0; i < strlen(s); i++) alp[s[i] - 'A']++;
}

int main() {
	scanf("%d %s", &n, buf);
	init(buf, alp1);
	int blen = strlen(buf);
	while (--n && scanf("%s", buf)) {
		memset(alp2, 0, sizeof(alp2));
		init(buf, alp2);
		diff = 0;
		for (int i = 0; i < 26; i++) diff += abs(alp1[i] - alp2[i]);
		if (diff < (blen == strlen(buf) ? 3 : 2)) ans++;
	}
	printf("%d", ans);
}
반응형

'Algorithm' 카테고리의 다른 글

백준 1927 : 최소 힙  (0) 2021.11.14
백준 20040 : 사이클 게임  (0) 2021.11.14
백준 4195 : 친구 네트워크  (0) 2021.11.14
백준 1976 : 여행 가자  (0) 2021.11.14
백준 1717 : 집합의 표현  (0) 2021.11.14

+ Recent posts