このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文についておおまかに説明する。
サッカーでは、すべてのメジャーな国別リーグは次の方法で実施されている:
リーグはいくつかのチームからなる。1年を通して、各チームは別のチームと2試合行う - 1つは自身のスタジアム、1つは相手のスタジアムで行う。チームが自身のスタジアムでプレーするときは"ホームチーム"、相手は"アウェーチーム"と呼ばれる。各試合は3つの結果の1つで終わる: ホームチームの勝利、引き分け、相手チームの勝利である。チームは勝つ度に3ポイントを獲得する。引き分けは両方のチームに1ポイントが与えられる。負けたチームにはポイントは与えられない。全チームのランキングは各チームが受け取ったポイントの合計に基づく。さて、matches[]という文字列型の配列が与えられる。i番目の要素のj番目の文字の試合はチームiのスタジアムでチームiとチームjの間の試合の結果を表す。Wはホームチームの勝利、Dは引き分け、Lはアウェーチームの勝利を表す。主対角線上の試合のすべての文字は自身と戦うことはないので、"-"になる。i番目の要素がi番目のチームが獲得した点数の合計となる整数型の配列を返せ。
私の解答はこちら。
public class SoccerLeagues { public int[] points(String[] matches) { int[] pts = new int[matches.length]; for( int i=0 ; i<matches.length ; i++ ){ for( int j=0 ; j<matches[0].length() ; j++ ){ // 全探索の必要がある if( i == j ) continue; // 対角線上は無視 char c = matches[i].charAt(j); if( c == 'W' ){ // cの結果に応じてチームi、jにポイントを振り分ける pts[i] += 3; }else if( c == 'D'){ pts[i]++; pts[j]++; }else{ pts[j] += 3; } } } return pts; } }
得点は241.19/250、1回のsubmitでシステムテストクリア。
0 件のコメント:
コメントを投稿