2012年4月10日火曜日

TopCoder SRM372 Div2 250Pts

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

医者があなたに、食べるべきものを文字列(1つの食べ物が1文字になっている)で表した食事療法を与えた。あなたは自分が朝食と昼食で食べたものを知っており、それらも文字列(やはりこれも1つの食べ物が1文字)で表されている。夕食はたべてよい残りの物をすべて食べることを決めたので、それを文字列として返すようなメソッドを作成してほしい(文字はアルファベット順にソートせよ)。もし、食事計画にないものや、あるものを指定された量以上食べた場合は"CHEATER"という文字列を返すようにせよ。

例えばdiet="ABCD"でbreakfast="A"、lunch="BC"であれば、夕食には"D"が食べられるので"D"を返すことになる。

私の解答はこちら。

import java.util.Arrays;

public class DietPlan {

 public String chooseDinner(String diet, String breakfast, String lunch) {
  String eat = breakfast + lunch;
  StringBuilder sb = new StringBuilder(diet); // 文字列の除去のためStringBuilderを利用
  for( int i=0 ; i<eat.length() ; i++ ){
   int idx = sb.toString().indexOf(eat.charAt(i)); // たべたものを探す
   if( idx < 0 ) return "CHEATER"; // たべたものがdiet中になかったら...
   sb = sb.delete(idx, idx+1); // たべてよいものがあったので、食べたということで取り除く
  }
  char[] tmp = sb.toString().toCharArray(); // ソートのために1文字ごとに分解
  Arrays.sort(tmp);
  return String.valueOf(tmp);
 }

}

得点は210.37/250、中央値は約214点。1回のsubmitでシステムテストクリア。文字列を順に取り除くということを実装しようとしたばかりに操作が増えてしまってますね。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計