2011年10月21日金曜日

TopCoder SRM261 Div2 250Pts

このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。それでは、問題について説明する。

この問題では、エクセルのシートの列ラベルの生成ルールについて考えている。エクセルのシートの列は、1列目はA、2列目はB、...26列目はZ、27列目はAA、28列目はAB、...702列目はZZという関係がある。何列目かを表す整数型の値column(1~702に限定)が与えられたときに、列を表す文字列を返すというのが問題である。

私の解答はこちら。

public class SpreadsheetColumn {
 public String getLabel(int column) {
  int d1 = column / 26;
  int d2 = column % 26;
  char c2 = d2 == 0 ? 'Z' : (char) (d2-1+'A');
  d1 = d2%26==0 ? d1-1 : d1;
  if( column > 26 ){
   char c1 = d1 == 27 ? 'Z' : (char) (d1-1+'A');
   return "" + c1 + c2;
  }else{
   return "" + c2;
  }
 }
}

正直なところ、結構苦労していました。10進数の0に相当するものがない(Aは1扱いなので)のが、解く際に混乱していた原因です。もっとも、0に相当する文字があれば、簡単すぎる問題になってしまうのでしょうけれど。

0 件のコメント:

コメントを投稿

フォロワー

ページビューの合計