2011年9月19日月曜日

TopCoder SRM248 Div2 250Pts

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

英語では音節は遮られない音の集まりとゆるやかに定義される。発音された数で音節を定義するということもある。ただ、一般には単語の音節を数えるプログラムを書くのは容易ではない。ここでは、音節を数えるのに次の手続きを踏むものとする。それはA、E、I、O、Uという母音の集まりを1つの音節とし、単語の音節の総数に1つ加えるということである。
母音の集合は子音(母音でない21の文字)、もしくは単語の先頭または最後尾によって区切られる。例えば、FOOBARは2つの音節がある。OO、Aの二つが音節になる。

inputという文字列が引数に与えられたときに、上の音節の数え方で、単語にいくつ音節が含まれているかを返すメソッドを作成せよ。

私の解答はこちら。

public class SyllableCounter {
 public int countSyllables(String word) {
  boolean inVowel = false; // 注目している文字が母音ならtrue
  boolean prev = false; // 直前の文字が母音ならtrue
  int cnt = 0; // 音節の登場回数
  for( int i=0 ; i<word.length() ; i++ ){
   if( word.charAt(i) == 'A' || word.charAt(i) == 'I' ||
    word.charAt(i) == 'U' || word.charAt(i) == 'E' ||
    word.charAt(i) == 'O' ){
    inVowel = true;
   }else{
    inVowel = false;
   }
   if( inVowel == true && prev == false ){
    cnt++; // 新たに母音が現れた
   }
   prev = inVowel; // 注目している文字は注目する文字の直前の文字になる
  }
  return cnt;
 }
}

得点は238.15/250。C言語にはないbooleanが大活躍するプログラムですね。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計