Pythonで3進数の文字列を10進整数に変換する方法
3進数を10進数に変換するとは
ここでは、3進数(使用できる数字は0、1、2のみ)で表された数値を文字列 s として受け取り、それに対応する10進数の整数を求める方法を解説します。
例えば、入力が "10122" の場合、出力は 98 になります。
アルゴリズムの考え方
この問題は、各桁を左から順に処理していくことで解決できます。手順は以下の通りです。
- 答えを格納する変数 ans を 0 で初期化します。
- 文字列 s の各桁 c について、次の計算を繰り返します。
- ans := 3 * ans + c
- すべての桁を処理し終えたら、ans を返します。
この「左の桁から順に3倍して足していく」手法は、任意の進数を10進数へ変換する際に使える汎用的なテクニックです。例えば "10122" の場合、処理は次のように進みます。
- 1 → ans = 0 × 3 + 1 = 1
- 0 → ans = 1 × 3 + 0 = 3
- 1 → ans = 3 × 3 + 1 = 10
- 2 → ans = 10 × 3 + 2 = 32
- 2 → ans = 32 × 3 + 2 = 98
実装例
理解を深めるために、以下の実装を見てみましょう。
class Solution:
def solve(self, s):
ans = 0
for c in map(int, s):
ans = 3 * ans + c
return ans
ob = Solution()
print(ob.solve("10122"))入力
"10122"
出力
98
補足:int()関数を使った別の書き方
実は Python には標準で進数変換の機能が備わっており、int() 関数の第2引数に基数を指定するだけで同じ結果が得られます。
s = "10122" print(int(s, 3)) # 出力: 98
競技プログラミングや学習目的でアルゴリズムを自前で実装したい場合は前者の方法、実務で手軽に変換したい場合は int(s, 3) を使うとよいでしょう。
-
Pythonのcodeモジュール入門:インタプリタ基本クラスの使い方
Pythonの対話モードは、REPL(Read-Evaluate-Print-Loop:読み込み・評価・表示・繰り返し)という仕組みで動作しています。標準ライブラリのcodeモジュールを利用すると、Pythonスクリプトの中からこのREPL環境を簡単に構築できます。 codeモジュールで定義されている2つのクラス InteractiveInterpreter: ソースコードの解析とインタプリタの状態(ユーザーの名前空間)を管理するクラスです。 InteractiveConsole: 対話型Pythonインタプリタの動作を忠実に再現するクラスです。 便利な関数 interact(): read
-
Pythonの例外基本クラス徹底解説|BaseExceptionと例外階層、独自例外の作り方
Pythonにおける例外とは Pythonには、他の高水準言語と同様に例外(Exception)の仕組みが備わっています。プログラムの実行中に問題が検出されると例外が発生(raise)し、適切に処理しなければプログラムはその時点で中断されます。代表的な例外には、ゼロ除算を表すZeroDivisionErrorや、アサーションの失敗を表すAssertionErrorなど、さまざまな種類があります。 すべての例外クラスはBaseExceptionクラスから派生しています。開発者は組み込みの例外をそのまま利用できるだけでなく、raise文を使ってコード中で意図的に例外を発生させることもできます。さら