[백준] - 2607 비슷한 단어 (node.js)

밀루·2025년 1월 27일
0

BOJ

목록 보기
62/82

문제링크

풀이

한 단어에서 한 문자를 더하거나, 빼거나, 하나의 문자를 다른 문자로 바꾸어 나머지 한 단어와 같은 구성을 갖게 되는 경우에 비슷한 단어라 한다고 명시되어 있다. 하나의 문자라고 주어지므로, 비슷한 단어가 되는 경우를 정리해보면 아래와 같다.

  1. 두 단어의 길이의 차가 1보다 크다면 비슷한 단어가 될 수 없다.
    • 둘 이상의 문자를 추가하거나 빼야하니까
  1. 두 단어의 문자 개수의 차이가 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);

참고링크

profile
이밀루의 도전

0개의 댓글