2011年11月8日火曜日

TopCoder SRM265 Div2 250Pts

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

GUIは、さまざまなGUIコンポーネントで単語を適切に表示するテキストの決まりごとに依存している。1行のテキストで幅を決められれば、ウィンドウ中のテキストを中央にするのに役立てられる。あなたには、文字と空白からなる文が与えられる。また、あるフォントに対する、アルファベットの小文字(lowercawse)と大文字(uppercase)の文字の幅が与えられる。このとき、文の幅を返すメソッドを作成せよ。

uppercase[]とlowercase[]は26の要素からなる。uppercaseの先頭はAという文字の幅を表し、最後はZという文字の幅を表す。小文字の場合も同様で先頭はaの幅、最後はzの幅を表す。空白はいつも3ピクセルに相当する。また、文字が描画されたとき、隣り合う文字は1ピクセルあけられているものとする。

私の解答はこちら。

public class FontSize {

 public int getPixelWidth(String sentence, int[] uppercase, int[] lowercase) {
  int totalWidth = 0;
  for( int i=0 ; i<sentence.length() ; i++ ){
   if( Character.isUpperCase(sentence.charAt(i)) ){
    int idx = sentence.charAt(i) - 'A';
    totalWidth += uppercase[idx];
   }else if( Character.isLowerCase(sentence.charAt(i)) ){
    int idx = sentence.charAt(i) - 'a';
    totalWidth += lowercase[idx];
   }else{
    totalWidth += 3;
   }
   if( i < sentence.length()-1 ) totalWidth++;
  }
  return totalWidth;
 }

}

制約上、文字はアルファベットと空白しかないので、上のような回答が許されていることに注意。ちょっとした場合分けで解けるので、難しくはないと思います。

0 件のコメント:

コメントを投稿

フォロワー

ページビューの合計