본문 바로가기
코딩테스트(알고리즘)/baekjoon

[baekjoon] 4659 비밀번호 발음하기 (Javascript,C++)

by Cafe Mocha 2022. 7. 12.

4659번: 비밀번호 발음하기 (acmicpc.net)

 

4659번: 비밀번호 발음하기

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

www.acmicpc.net


접근 : 구현, 문자열

 

1. 주어진 조건을 통해 구현

 


Javascript

let input = require("fs")
  .readFileSync("input.txt") //"/dev/stdin"
  .toString()
  .split("\n")
  .map((val) => val.trim());
function solution() {
  while (input[0] !== "end") {
    let s = input.shift().split("");
    let check1 = false;
    let check2 = true;
    let vcnt = 0;
    let lcnt = 0;
    let check3 = true;

    let a = ["a", "e", "i", "o", "u"];
    for (let i = 0; i < s.length; i++) {
      //a e i o u check
      if (a.includes(s[i])) {
        check1 = true;
      }
      //모음, 자음 3개 연속 check
      if (a.includes(s[i])) {
        vcnt++;
        lcnt = 0;
      } else {
        vcnt = 0;
        lcnt++;
      }

      if (vcnt === 3 || lcnt === 3) {
        check2 = false;
      }

      //같은 글자 연속, 단 ee, oo ok
      if (s[i] === s[i + 1]) {
        if (s[i] === "e" || s[i] === "o") continue;
        check3 = false;
      }
    }

    if (check1 && check2 && check3) {
      console.log(`<${s.join("")}> is acceptable.`);
    } else {
      console.log(`<${s.join("")}> is not acceptable.`);
    }
  }
}

solution();

C++

#include <bits/stdc++.h>
using namespace std;
string s;
int cnt[26], lcnt,vcnt;

bool isVowel(int a){
  return (a==0||a==4||a==8||a==14||a==20);
}

int main()
{
  freopen("input.txt", "r", stdin); //제출 시 삭제

    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

  while(true){
    cin>>s;
    if(s=="end") break;
    memset(cnt,0,sizeof(cnt));
    lcnt = vcnt = 0;
    bool check = true;

    for(int i=0;i<s.size();i++){
      int idx = s[i]-'a';
      cnt[idx]++;
      if(isVowel(idx)) lcnt++, vcnt=0;
      else vcnt++,lcnt=0;
      if(vcnt==3||lcnt==3) check=false;
      if((s[i+1]==s[i]) && (idx!=4 && idx !=14)){
        check = false;
      }
    }

    if(!cnt[0]&&!cnt[4]&&!cnt[8]&&!cnt[14]&&!cnt[20]) check= false;

    if(check) cout<<"<"<<s<<">"<<" is acceptable.\n";
    else cout<<"<"<<s<<">"<<" is not acceptable.\n";
  }
  return 0;

}