2011年12月15日木曜日

TopCoder SRM277 Div2 250Pts

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

なにか食べたくなってサンドイッチバーに着いた。多くの人のように、私はあるサンドイッチが好きである。事実、私は好きなタイプのサンドイッチを一覧にしたものを持っている。サンドイッチバーでは、特定の食べ物が食べられる。私は好きな順にサンドイッチの一覧を用意し、バーで作れるもっとも好きなサンドイッチを買う。バーがサンドイッチを買わせるためには、バーは欲しいと思う食材をすべて含んだものを用意しなければならない。available[]というサンドイッチバーが利用可能な食材のリストと、orders[]という私が好きな順にサンドイッチを並べたものが与えられたとき、私が買うサンドイッチの添え字を先頭を0としたうえで求めて返せ。私の好きなサンドイッチ(orders[])の各要素は、食材ごとにスペースで文字が区切られている。もし、バーが私の好きなサンドイッチを作れないようなら、-1を返せ。

重要な条件としてはorders[]の各要素の先頭と最後にはスペースはなく、文字はa-zとスペースからなるということと、available[]の各要素はa-zのアルファベットのみからなるということが挙げられる。

私の解答はこちら。

public class SandwichBar {

 public int whichOrder(String[] available, String[] orders) {
  for( int i=0 ; i<orders.length ; i++ ){
   String[] orderList = orders[i].split(" "); // 入れて欲しい食材一覧
   Boolean isOK = false;
   for( int j=0 ; j<orderList.length ; j++ ){
    isOK = false;
    for( int k=0 ; <available.length ; k++ ){
     if( available[k].equals(orderList[j])){
      isOK = true; // バーが用意できる食材ならOKで継続
     }
    }
    if( isOK == false ) break; // 途中で用意できない食材とわかったら次へ
   }
   if( isOK == true ) return i; // 全部食材が用意できたら、それが答。
  }
  return -1; // リストの最後までバーは好きなサンドイッチが作れなかった
 }

}

得点は228.95/250、中央値は約156/250。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計