この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 件のコメント:
コメントを投稿