2011年8月16日火曜日

TopCoder SRM223 Div2 250Pts

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

1つの商品を売るのにかかるコストcosts[]、売値のprices[]、売れた個数sales[]、商品名items[]が与えられたときに、もっとも利益を生み出した(利益率ではないよ)商品名を返すメソッドを作成する。どの配列も一つの添え字で一つの商品を表している。利益を生みだす製品がなければ空文字を返すようにせよ。もっとも利益を出した商品が複数ある場合は添え字の小さい方を返すようにすること。

私の解答は以下の通り。

public class MostProfitable {
 public String bestItem(int[] costs, int[] prices, int[] sales, String[] items) {
  int idx = -1;
  int maxProfit = -1;
  for( int i=0 ; i<costs.length ; i++ ){
   int profit = (prices[i]-costs[i])*sales[i];
   // profit > maxProfitの不等号に注意、=は不要
   // 利益を出す商品に絞るためprofit>0が必要
   if( profit > maxProfit && profit>0 ){ 
    idx = i;
    maxProfit = profit;
   }
  }
  if( idx < 0) return "";
  return items[idx];
 }
}

得点は244.86、中央値は約225点。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計