このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文について説明する。
あなたは積みあがった本を、各箱の重量制限にひっかからないようにしつつ、できるだけ1つの箱に本を詰めようとしている。できるだけ本を詰め込んだら、箱を閉じて封をして、次の箱に本を詰めはじめる。本は積み上げたものの上から順に取り、次の本をとる前に箱に詰める。本の重量はweights[]という整数型の配列で与えられており、最初の要素は積み上げた本の1番上の重量を表し、最後の要素は積み上げた本の一番下の本の重量を表している。箱に詰められる重さの上限はmaxWeightという変数で与える。このとき、すべての本を詰めるのに必要となる箱の数の最小値を返すメソッドを作成せよ。
私の解答はこちら。
public class BoxesOfBooks { public int boxes(int[] weights, int maxWeight) { int current = 0; int nBox = 1; if( weights.length == 0 ) return 0; for( int i=0 ; i<weights.length ; i++ ){ if( current + weights[i] > maxWeight ){ // もし次の本を詰めると重さの上限を超えるなら current = weights[i]; // 次の箱にその本を詰め、 nBox++; // 必要となる箱の数を1増やす }else{ // 次の本を詰めても重さの上限を超えない場合は、現在の箱に入っている本の重さの合計を増やす current += weights[i]; } } return nBox; } }
得点は243.02/250、1回のsubmitでシステムテストクリア。中央値は約217点。
0 件のコメント:
コメントを投稿