2011年9月11日日曜日

TopCoder SRM240 Div2 250Pts

このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。それでは、問題について説明する。

ピーターは難しい単語の発音に難がある。特に子音が3つ以上連続する単語が発音できない(streetとか)。さらに、異なる母音が2つ以上続いている単語も発音できない(goalとか)。同じ母音が2つ続いているものについては発音できる(needとか)。

母音はa、i、u、e、oであり、その他は子音である。単語の集まりwords[]が与えられる。もしピーターがwords[]をすべて発音できるのであれば空文字を返せ。そうでなければ、発音できないもののうち、最初に現れたものを返せ。

私の解答はこちら。

public class Pronunciation {
 public String canPronounce(String[] words) {
  for( int i=0 ; i<words.length ; i++ ){
   int consonants = 0;
   int vowel = 0;
   char prevAlphabet = '\0';
   for( int j=0 ; j<words[i].length() ; j++ ){
    // 母音の処理
    char currentAlphabet = words[i].toLowerCase().charAt(j);
    if( currentAlphabet == 'a' ||
     currentAlphabet == 'i' ||
     currentAlphabet == 'u' ||
     currentAlphabet == 'e' ||
     currentAlphabet == 'o' ){
     consonants = 0;
     vowel++;
     if( vowel >= 2 && prevAlphabet != currentAlphabet ){
      return words[i];
     }
     prevAlphabet = currentAlphabet;
    }else{ // 子音の処理
     consonants++;
     vowel = 0;
     if( consonants >= 3 ){
      return words[i];
     }
    }
   }
  }
  return "";
 }

}

得点は197.52/250、中央値は82点。母音と子音に分けて処理を書くことでスムーズに実装できた。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計