2013年4月13日土曜日

TopCoder SRM465 Div2 250Pts

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

コメントを投稿

フォロワー

ページビューの合計