このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文についておおまかに説明する。
numbers[]という整数型配列が与えられたときに、隣り合う数字のペアの数を返せ。隣り合う数字のペアというのは、数字を並び替えて作ることができる数字で先頭の0を除去したときに一致するものがあることをいう。例えば40020と204は00024と024と並び替えて先頭の0を除くと一致するので隣り合う数字のペアである。
私の解答はこちら。
import java.util.ArrayList;
import java.util.Arrays;
public class NumberNeighbours {
public int numPairs(int[] numbers) {
int nPair = 0;
for( int i=0 ; i<numbers.length ; i++ ){
for( int j=i+1 ; j<numbers.length ; j++ ){ // 探索範囲のインデックスに注意
char[] s1 = ("" + numbers[i]).toCharArray(); // 各ペアを文字列に変換して
char[] s2 = ("" + numbers[j]).toCharArray();
s1 = removeZeros(s1); // 0を文字列から取り除いて
s2 = removeZeros(s2);
Arrays.sort(s1); // 文字コードでソートして
Arrays.sort(s2);
if( Arrays.equals(s1, s2)) nPair++; // 一致していれば隣り合う数字のペアとなる
}
}
return nPair;
}
private char[] removeZeros(char[] cs){
ArrayList<Character> ret = new ArrayList();
for( int i=0 ; i<cs.length ; i++ ){
if( cs[i] != '0' ) ret.add(cs[i]);
}
return ret.toString().toCharArray();
}
}
得点は194.99/250、1回のsubmitでシステムテストクリア。この問題は軍隊がどうのこうのという設定があるのですが、本質的に関係ないので特に訳してません。
0 件のコメント:
コメントを投稿