白駿1316号組合せ単語checker-nodejs


この位置決めは、白俊1316号の組合せ語checkefulに関連する.質問リンク
コードはjavascriptで書かれています.

質問する


問題の説明

  • 組合せ語とは単語に存在するすべての文字を指し、各文字が連続して現れる場合のみである.
  • ccazzzzbbccazzbbは、c、a、z、bが連続的に現れるため、kinもk、i、nが連続的に現れる組み合わせ語である.
  • aabbbccbaabbbbccbは組み合わせ語ではありません.bは別々に現れるからです.
  • プログラムを作成し、N個の単語を入力し、グループ内の単語数を出力してください.

    入力

  • [첫째 줄]:単語個数N(1≦N≦100)
  • [둘째 줄 ~ N개의 줄]:単語が入ってくる.単語はアルファベット小文字だけで、繰り返しず、最長100です.
  • しゅつりょく


    最初の行はグループ語の個数を出力します.

    に答える


    文字列に現れると같은 알파벳이 연속해서組合せ語ではない하나라도 떨어져서 나타날 시組合せ語.入力値として与えられる単語には、グループの単語に対応する個数を出力すればよい.
    したがって、인덱스 i의 원소와 인덱스 i+1의 원소가 다를の場合、後の인덱스 i의 원소와 동일한 원소가 나오면この語は組み合わせ語ではありません.
    そこで、まず단어 개수인 N을 그룹단어 개수로 초기화を完了してから、上記の論理で各単語を検証します.単語リストに無効な単語が表示された場合、N=1を使用してグループの単語の個数を決定できます.

    完全なコード

    const input = require('fs').readFileSync('/dev/stdin').toString().split('\n').slice(0, -1);
    // 단어 개수인 N을 그룹단어 개수로 초기화
    let N = Number(input.shift());
    // 단어 리스트
    const parsed = [...input];
    
    // 단어리스트 loop
    for (let el of parsed) {
        const len = el.length-1;
        // 단어 요소 loop
      	for (let i=0; i < len; i++) {
            // 인덱스 i와 i+1 값이 다를 경우,
            if (el[i] !== el[i+1]) {
                // 인덱스 i+2 이후에 인덱스 i와 동일한 알파벳이 나올 경우 그룹단어가 아니다.
                const test = el.slice(i+2);
                if (test.includes(el[i])) {
                  	// 그룹단어 제거
                    N--;
                    break;
                }
            }
        }
    }
    
    console.log(N);