2012年12月12日水曜日

TopCoder SRM442 Div2 250Pts

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

Simple Word Gameというのは、プレーヤが与えられた辞書からできるだけ多くの単語を覚えようとするゲームである。プレーヤが覚えていた各単語に対するスコアは単語長さの平方である。player[]という各要素がプレーヤが覚えた単語の文字列型配列である。重複した単語があるかもしれないが、もし同じ単語が複数回出てきたら、それは1度に限って数える。dictionary[]という辞書も与えられ、これは各単語が異なったものからなる文字列型の配列である。プレーヤの合計点を返せ。

私の解答はこちら。

import java.util.Arrays;

public class SimpleWordGame {

 public int points(String[] player, String[] dictionary) {
  int pts = 0; // プレーヤの得点
  // 重複はソートして直前の単語と同じなら点数にしないという方針で作成する
  Arrays.sort(player);
  String prev = ""; // 直前の単語
  for( int i=0 ; i<player.length ; i++ ){
   String playerWord = player[i];
   if( playerWord.equals(prev) ) continue;
   for( int j=0 ; j<dictionary.length ; j++){
    if( dictionary[j].equals(playerWord) ){ // 辞書に覚えていた単語があった
     pts += playerWord.length() * playerWord.length();
     break;
    }
   }
   prev = playerWord; // 直前の単語の単語を更新
  }
  return pts;
 }

}

得点は244.25/250、1回のsubmitでシステムテストクリア。

0 件のコメント:

コメントを投稿

フォロワー

ページビューの合計