このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文について説明する。
introduction、story、edificationの3つのパートからなる本がある。ある人は本の元へ向かい、本の様々な部分を読んでいく。その人は、本を読み終える度に、リストに読み終えたパート名を付け加えていく。各本の0以上のパートを読む。どの順序で読むことができるが、各パートは1度しか読むことができないものとする。新しい本を読み始める度に、以前に見ていた本を読むことはできなくなる。readParts[]という読んだパートを示したリストが与えられたときに、3つのパートすべてを読んだ可能性がある本の数の最大値を返すメソッドを作成せよ。
私の解答はこちら。
import java.util.Arrays; public class ReadingBooks { public int countBooks(String[] readParts) { int[] times = new int[2]; int nRead = 0; for( int i=0 ; i<readParts.length-2 ; ){ // 以下の条件がtrueのとき、3パートは1つの本を構成しない if( readParts[i].equals(readParts[i+1]) || readParts[i].equals(readParts[i+2]) || readParts[i+1].equals(readParts[i+2]) ){ i++; }else{ nRead++; i += 3; } } return nRead; } }
得点は103.62/250、2回目のsubmitでシステムテストクリア。中央値は約143点。誤訳して間違った実装をしていました、ハイ。
0 件のコメント:
コメントを投稿