このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文について説明する。
あなたは棚に一列に並んだトロフィーを所有している。トロフィーの高さはtrophies[]とうい整数型の配列で与えられており、棚の左から右に順番に高さの値が入っている。棚は人が入るときに直接左から見える位置にある。別の言い方をすれば、一番左のトロフィーは完全に見えるし、隣のトロフィーはトロフィーの並ぶ直線の後ろにあるように見える。不幸なことに、背の高いトロフィーが左側にあると他の奥にあるトロフィーが見えるのを遮ってしまう。トロフィーはその手間にあるトロフィーがそれよりも背が低い場合にのみ見えるものとする。そしてあなたは、棚を180度回転させたなら見えるトロフィーが増えるのではないかと考えた。さて、最初の要素が左から見たときに見えるトロフィーの数、2番目の要素は右から見たとき(注:要は180度棚を回転させたときを考えているのでしょう)に見えるトロフィーの数からなる配列を返すメソッドを作成せよ。
私の解答はこちら。
public class TrophyShelf { public int[] countVisible(int[] trophies) { int min = -1; int[] nVisible = new int[2]; for( int i=0 ; i<trophies.length ; i++ ){ // 左から見た場合 if( trophies[i] > min ){ nVisible[0]++; min = trophies[i]; } } min = -1; for( int i=trophies.length-1 ; i>=0 ; i-- ){ // 右から見た場合 if( trophies[i] > min ){ nVisible[1]++; min = trophies[i]; } } return nVisible; } }
得点は245.06/250、1回のsubmitでシステムテストクリア。左右のどちらから見る場合も基本的なロジックは同じで、問題としては簡単とは思います。
0 件のコメント:
コメントを投稿