[백준] - 4659 비밀번호 발음하기 (node.js)

밀루·2025년 1월 15일
0

BOJ

목록 보기
49/82

문제링크

코드

// 올림픽

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 aeiou = ["a", "e", "i", "o", "u"];

const isaeiou = (string) => { // aeiou 포함하는지
  for (let i = 0; i < aeiou.length; i++) {
    if (string.includes(aeiou[i])) {
      return true;
    }
  }
  return false;
};

const two = (string) => { // 두개 연속
  if (string.length < 2) {
    return true;
  }

  for (let i = 1; i < string.length; i++) {
    if (string[i] === string[i - 1] && string[i] !== "e" && string[i] !== "o") // e와 o는 허용
      return false;
  }
  return true;
};

const three = (string) => { // 자음 혹은 모음 세 개 연속
  if (string.length < 3) {
    return true;
  }

  let mcnt = (jcnt = 0);
  for (let i = 0; i < string.length; i++) {
    if (aeiou.includes(string[i])) { // 모음이면
      mcnt++;
      jcnt = 0;
    } else { // 자음이면
      jcnt++;
      mcnt = 0;
    }
    if (jcnt >= 3 || mcnt >= 3) { // 3개 넘으면 return false
      return false;
    }
  }

  return true;
};

for (let i = 0; i < arr.length; i++) {
  const string = arr[i];
  if (string === "end") {
    break;
  }

  const acceptable = isaeiou(string) && two(string) && three(string);

  if (acceptable) {
    console.log(`<${string}> is acceptable.`);
  } else {
    console.log(`<${string}> is not acceptable.`);
  }
}
profile
이밀루의 도전

0개의 댓글