티스토리 뷰

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

 

4659번: 비밀번호 발음하기

좋은 패스워드를 만드는것은 어려운 일이다. 대부분의 사용자들은 buddy처럼 발음하기 좋고 기억하기 쉬운 패스워드를 원하나, 이런 패스워드들은 보안의 문제가 발생한다. 어떤 사이트들은 xvtp

www.acmicpc.net

const fs = require('fs');
const input = fs.readFileSync("./dev/stdin").toString().trim().split('\n').map(v => v.trim());
input.pop();

//모음(a,e,i,o,u) 하나를 반드시 포함하여야 한다.
//모음이 3개 혹은 자음이 3개 연속으로 오면 안 된다.
//같은 글자가 연속적으로 두번 오면 안되나, ee 와 oo는 허용한다.
const answer = [];
input.forEach(v => {
  if (hasVowel(v) && noThree(v) && sameLetter(v)) {
    answer.push(`<${v}> is acceptable.`)
  } else {
    answer.push(`<${v}> is not acceptable.`)
  }
})

console.log(answer.join('\n'))

function hasVowel(str) {
  const vowel = ['a', 'e', 'i', 'o', 'u'];
  for (let i = 0; i < vowel.length; i++) {
    if (str.includes(vowel[i])) {
      return true;
    }
  }
  return false;
}

function noThree(str) {
  const vowel = "aeiou";
  if (str.length < 3) {
    return true;
  } else {
    for (let i = 2; i < str.length; i++) {
      const pprev = vowel.includes(str[i - 2]);
      const prev = vowel.includes(str[i - 1])
      if (pprev == prev && prev == vowel.includes(str[i])) {
        return false;
      }
    }
    return true;
  }
}

function sameLetter(str) {
  if (str.length < 2) {
    return true;
  } else {
    for (let i = 1; i < str.length; i++) {
      if ((str[i - 1] == 'e' && str[i] == 'e') || (str[i - 1] == 'o' && str[i] == 'o')) continue;
      if (str[i - 1] == str[i]) {
        return false;
      }
    }
    return true
  }
}
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함