한 단어에서 한 문자를 더하거나, 빼거나, 하나의 문자를 다른 문자로 바꾸어 나머지 한 단어와 같은 구성을 갖게 되는 경우
에 비슷한 단어라 한다고 명시되어 있다. 하나의 문자
라고 주어지므로, 비슷한 단어가 되는 경우를 정리해보면 아래와 같다.
- 두 단어의 길이의 차가 1보다 크다면 비슷한 단어가 될 수 없다.
- 둘 이상의 문자를 추가하거나 빼야하니까
- 두 단어의 문자 개수의 차이가 1보다 크다면 비슷한 단어가 될 수 없다.
- 둘 이상의 문자를 추가하거나 빼거나 바꿔야하니까
- 위 두 가지가 1보다 작거나 같을 경우, 기준이 되는 단어의 문자와 같다면 지우고, 지워져서 남은 문자의 길이가 1보다 같거나 작다면 비슷한 단어이다.
- 남은 문자의 길이가 1보다 같거나 작다 === 하나의 문자를 다른 문자로 바꾸어 같은 구성으로 만들 수 있다
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const arr = fs
.readFileSync(filePath)
.toString()
.trim()
.split("\n")
.map((line) => line.replace("\r", ""));
const n = Number(arr[0]);
const word = arr[1];
let answer = 0;
for (let i = 2; i <= n; i++) {
let tmp = arr[i];
if (
Math.abs(word.length - tmp.length) > 1 ||
Math.abs(new Set(word).size - new Set(tmp).size > 1)
) // 두 단어의 길이의 차 > 1 || 두 단어를 이루고 있는 문자의 차이 > 1
continue;
for (const w of word) { // 기준이 되는 문자에서
tmp = tmp.replace(w, ""); // 같은 게 있다면 지우기
}
// 문자의 길이가 2보다 작다면 (1보다 작거나 같다면)
if (tmp.length < 2) answer++; // 비슷한 단어이다
}
console.log(answer);