見出し画像

AtCoder Beginner Contest 171を見直す(その2) 解けなかったC問題

C - One Quadrillion and One Dalmatians

問題

すごくざっくり言うと、数字が与えられるのでスプレットシートの列についてるアルファベットを答える問題。

例:
1 >> a
26 >> z
27 >> aa
702 >> zz
704 >> aab

ちなみに最大値は「1,000,000,000,000,001」(10^15+1)です。

解答

他の人の回答を参照して作ったのが以下。

N = int(input())
ans = ""
while N > 0:
   N -= 1
   ans += chr(97 + N%26)
   N //= 26
print(ans[::-1])

結構シンプルですね。この回答だと余0の場合に「a」になるように、ループの頭でNから1引いているんですが、コンテストの時にはそこが思い付けずに、どハマりしてしまいました。

ちなみに解説動画で紹介されていた「カッコいい」解答は以下。

def f(N):
   if N == 0: return ""
   N -= 1
   return f(N//26) + chr(97 + N%26)

N = int(input())
print(f(N))

解けたらええねん。とは思いつつもこういった「カッコいい」回答にも憧れますね。

この記事が気に入ったらサポートをしてみませんか?