このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文についておおまかに説明する。
n*nの盤面とその上にいくつかチェッカーの駒がある。i番目の駒は盤面のx[i]行、y[i]列のセルにある。すべての座標は1から始まるものとする。一つのセルには複数の駒がある可能性もある。一つの駒を動かすことは、駒を座標の上下左右に動かすことからなるものとする。あなたは各駒を盤面の4つの角に置きたいと思っている。その目標を達成するのに必要な最小の移動回数を返すメソッドを作成せよ。
私の解答はこちら。
public class TheSimpleGame { public int count(int n, int[] x, int[] y) { int nMove = 0; for( int i=0 ; i<x.length ; i++ ){ int xx = x[i]-1 < n-x[i] ? x[i]-1 : n-x[i]; // x座標方向の最小移動量 int yy = y[i]-1 < n-y[i] ? y[i]-1 : n-y[i]; // y座標方向の最小移動量 nMove += (xx + yy); } return nMove; } }
得点は236.60/250、1回のsubmitでシステムテストクリア。中央値は約229点。
0 件のコメント:
コメントを投稿