반응형
https://www.acmicpc.net/problem/2607
먼저 두 단어의 알파벳 개수를 초기화해주고, 각 알파벳 개수의 차이의 합을 구해줍니다.
길이가 같을 때는, 차이가 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 |