Pythonで7セグメントディスプレイを使って数値を表示できるか判定する方法
問題概要
数値 n ともう一つの入力 c が与えられます。この課題では、n を7セグメントディスプレイで表示できるかどうかを判定します。ただし、重要な制約として、点灯できるLEDの数は最大 c 個までとします。
例えば、入力が n = 315、c = 17 の場合、出力は True になります。315 を表示するのに必要なLEDは12個であり、17個まで点灯できるためです。
7セグメントディスプレイとは、7つのLED(セグメント)を「日」の字型に配置し、その点灯パターンの組み合わせで0〜9の数字を表す表示装置です。各数字を表示するために必要なセグメント数は以下の通りです。
- 0 → 6個
- 1 → 2個
- 2 → 5個
- 3 → 5個
- 4 → 4個
- 5 → 5個
- 6 → 6個
- 7 → 3個
- 8 → 7個
- 9 → 6個
解決アプローチ
この問題を解くには、以下の手順に従います。
- seg := 各数字に対応するLED数のリスト [6, 2, 5, 5, 4, 5, 6, 3, 7, 6] を用意する
- s := n を文字列に変換する
- led_count := 0 で初期化する
- i を 0 から s の長さ - 1 まで繰り返す:
- led_count := led_count + seg[i番目の文字の数値]
- led_count <= c であれば True を返す
- それ以外の場合は False を返す
実装例
理解を深めるために、以下のPythonコードを見てみましょう。
seg = [6, 2, 5, 5, 4, 5, 6, 3, 7, 6]
def solve(n, c):
s = str(n)
led_count = 0
for i in range(len(s)):
led_count += seg[ord(s[i]) - 48]
if led_count <= c:
return True
return False
n = 315
c = 17
print(solve(n, c))入力
315, 17
出力
True
計算量について
このアルゴリズムの時間計算量は O(d) です。d は数値 n の桁数を表します。また、文字列変換の分だけ空間計算量も O(d) となります。数値の各桁を一度だけ走査すればよいため、非常にシンプルかつ効率的なアプローチと言えるでしょう。
-
Pythonで素数を判定するプログラムの書き方を徹底解説
はじめに この記事では、「与えられた数値が素数かどうかを判定する」という問題に対する解決策を、Pythonのコード例とともにわかりやすく解説します。 問題の概要 問題設定:ある数値が与えられたとき、その数が素数であるかどうかを判定するプログラムを作成します。 まず「素数」の定義をおさらいしましょう。1より大きい正の整数のうち、1とその数自身以外に約数を持たない数を素数(そすう)と呼びます。たとえば、2、3、5、7などはそれ以外の約数を持たないため、素数です。 プログラムの考え方 今回作成するプログラムでは、入力された数値が素数かどうかを以下の手順で判定します。 1以下の数値は素数ではない
-
Pythonでアームストロング数を判定するプログラムの書き方
この記事では、与えられた整数が「アームストロング数(Armstrong number)」であるかどうかを判定するための考え方と、Pythonによる具体的な実装方法を解説します。 問題の定義 整数 n が与えられたとき、その整数がアームストロング数であるかどうかを判定することを目標とします。 アームストロング数とは? n 桁の正の整数 abcd… が次の条件を満たすとき、この数は「n 次(オーダー n)のアームストロング数」と呼ばれます。 abcd... = a^n + b^n + c^n + d^n + … つまり、各桁の数字を「桁数乗」した値の総和が、元の数と一致するかを確認す