このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文についておおまかに説明する。
N日(1~Nという日とする)のうちK日(1<=K<=N)連続した休みがとりたいのだが、workingDaysにある日については会議がある(配列の要素は1以上N以下の整数で与えられる)。このとき会議がある日を最小でいくつずらせば、K日の連続した休みを取ることができるか。
import java.util.Arrays;
public class VacationTime {
public int bestSchedule(int N, int K, int[] workingDays) {
Arrays.sort(workingDays);
int mindays = workingDays.length + 1;
for( int i=1 ; i<=N-K+1 ; i++ ){
int ndays = 0;
for( int j=i ; j<i+K ; j++ ){
for( int k=0 ; k<workingDays.length ; k++ ){
if( workingDays[k] == j ) ndays++;
}
}
if( ndays < mindays ) mindays = ndays;
}
return mindays;
}
}
得点は190.81/250、1回のsubmitでシステムテストクリア。本文はもうちょっと前フリがあるのですが、面倒なので省略。

0 件のコメント:
コメントを投稿