この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に相当する文字があれば、簡単すぎる問題になってしまうのでしょうけれど。