-
Pythonで指定された頂点の次数が木(ツリー)を表すかグラフを表すかを判定する方法
問題の概要いくつかの頂点に対する次数(degree)のリストが与えられたとき、そのリストが木(ツリー)を表しているのか、それとも一般的なグラフを表しているのかを判定する問題を考えます。例えば、入力として deg = [2,2,3,1,1,1] が与えられた場合、出力は「Tree」となります。判定のアルゴリズムこの問題は、次の手順で解くことができます。vert: 頂点の数を取得するdeg_sum: すべての頂点の次数の合計を計算するもし 2 × (vert − 1) が deg_sum と等しければ「Tree」を返すそうでなければ「Graph」を返すこの判定が成り立つ理由グラフ理論における握手の
-
Pythonで浮動小数点数が偶数か奇数かを判定する方法
浮動小数点数が与えられたとき、その数が偶数か奇数かを判定する方法を解説します。整数の場合であれば、最後の桁が2で割り切れるかどうかを確認するだけで簡単に判定できます。しかし、浮動小数点数の場合はそう単純にはいきません。小数部分を持つ数値に対しては、単純に最後の桁を2で割って偶奇を判定することができないからです。例えば、入力が n = 200.290 の場合を考えてみましょう。最後の桁は「0」で2で割り切れますが、正しい出力は「Odd(奇数)」になります。これは、小数点以下の末尾にある0が必ずしも数値の実質的な値を表していないためです。解決のための手順この問題を解決するには、以下の手順に従います
-
Pythonで2つの文字列を連結して特定の文字列を生成できるかどうかを判定する方法
この記事では、2つの文字列 s と t、およびもう1つの文字列 r が与えられたときに、r が s + t または t + s(連結)として表現できるかどうかを判定する方法を解説します。例えば、s = world、t = hello、r = helloworld という入力の場合、helloworld(r)は hello(t)+ world(s)と一致するため、出力は True になります。解決のアプローチこの問題は、以下の手順で解くことができます。長さのチェック: r の長さが s と t の長さの合計と異なる場合、連結では絶対に作れないため False を返します。パターン1の確認: r
-
Pythonで3つの数が「隣接する素数」かどうかを判定する方法
隣接する素数とは?3つの数が与えられたとき、それらが隣接する素数(連続する素数)であるかどうかを判定する問題を考えてみましょう。隣接する素数とは、2つの素数の間に他の素数が存在しない関係のことです。例えば、5と7の間には素数がありません。同様に7と11の間にも素数は存在しないため、[5, 7, 11]という組み合わせは隣接する素数といえます。したがって、入力が nums = [5, 7, 11] の場合、出力は True になります。解決のアプローチこの問題を解くためには、以下の手順に従います。3つの数のうち1つでも素数でない場合は False を返すx の次の素数が y と一致しない場合は
-
Pythonで1つの要素を変更して2つの配列を一致させられるか判定する方法
2つの配列 nums1 と nums2、および整数 k が与えられているとします。nums1 のいずれか1つの要素に対して、範囲 [-k, k] 内の任意の値を加えるという操作を一度だけ行うことで、両方の配列を等しくできるかどうかを判定するのがこの問題です。例えば、入力が nums1 = [5,7,11]、nums2 = [5,5,11]、k = 8 の場合を考えてみましょう。nums1[1](値は7)に -2(範囲 [-8, 8] 内)を加えると 5 になり、nums2 と完全に一致します。したがって、出力は True になります。解法のアプローチこの問題は、以下の手順で解くことができます。
-
Pythonで数値のK番目のビットがセットされているかどうかを判定する方法
数値 n と別の値 k が与えられたとき、n の k 番目のビットが 1(セットされている状態)かどうかを判定します。ここで、k は右側(最下位ビット側)から数えた位置とします。たとえば、入力が n = 23、k = 3 の場合、出力は True になります。これは、23 を2進数で表すと「10111」となり、右から3番目のビットが 1 であるためです。解決のアプローチこの問題は、ビット演算を使うことで効率的に解けます。手順は以下の通りです。n を右に (k − 1) ビットシフトした値を temp とするtemp と 1 のAND演算結果が 1 であれば True を返すそれ以外の場合は F
-
Pythonで数値が二面素数(Dihedral Prime)かどうかを判定する方法
ある整数nが与えられたとき、それが「二面素数(dihedral prime)」であるかどうかを判定する方法を解説します。二面素数とは、その数自体が素数であり、さらに7セグメントディスプレイに表示した際に、表示の向き(通常の向きでも上下逆さまでも)に関わらず、同じ数または別の素数として読み取れる数のことです。例えば、入力がn = 1181の場合、出力はTrueになります。下の数字は上の数字を上下逆さま(180度回転)にして表示したものであり、どちらも素数となっています。アルゴリズムの手順この問題を解くために、以下の手順で進めます。up_side_down() 関数を定義します。引数としてnを受け
-
Pythonで配列内の数値の積が偶数か奇数かを判定する方法
問題概要 整数の配列 nums が与えられたとき、その要素すべてを掛け合わせた積が偶数か奇数かを判定する方法を解説します。 例えば、入力が nums = [5,7,4,2,6] の場合、積は 5 × 7 × 4 × 2 × 6 = 1680 となり、これは偶数なので出力は「Even」になります。 アプローチのポイント ここで重要なのは、配列の中に1つでも偶数が含まれていれば、積は必ず偶数になるという数学的な性質です。したがって、実際にすべての要素を掛け合わせる必要はなく、偶数の存在だけを確認すればよいことになります。 具体的には、以下の手順で判定できます。 インデックス 0 から配列の末尾
-
Pythonで偶数桁の数字の積が奇数桁の数字の合計で割り切れるか判定する方法
ある数値 n が与えられたとき、偶数番目の桁にある数字の積が奇数番目の桁にある数字の合計で割り切れるかどうかを判定します。ここで、桁の位置は右から左へ数え始め、いちばん右の桁を1桁目とします。 問題の例 たとえば、入力が n = 59361 の場合を考えてみましょう。 偶数桁(2桁目・4桁目)の数字は「6」と「9」→ 積は 6 × 9 = 54 奇数桁(1桁目・3桁目・5桁目)の数字は「1」「3」「5」→ 合計は 1 + 3 + 5 = 9 54 ÷ 9 = 6 となり余りが出ないため、この場合の出力は True になります。 解法のアプローチ この問題は、次の手順で解くことができます。
-
Pythonで偶数番目の桁の数字の積がKで割り切れるかどうかを判定する方法
ある整数 n と別の整数 k が与えられたとき、n の偶数番目の桁にある数字の積が k で割り切れるかどうかを判定します。ここで、桁の位置は右から左へ数えるものとし、最も右端の桁を 1 桁目とします。 例えば、入力が n = 59361 の場合を考えてみましょう。右から数えると、各桁の位置と数字は次のようになります。 1桁目:1 2桁目:6 3桁目:3 4桁目:9 5桁目:5 偶数番目(2桁目と4桁目)の数字は 6 と 9 なので、その積は 6 × 9 = 54 となります。54 は 3 で割り切れるため、この場合の出力は True になります。 解決のためのアプローチ この問題
-
Pythonで指定範囲内の整数の積が正・負・ゼロのどれかを判定する方法
範囲 [l, u] の下限 l と上限 u が与えられたとき、その範囲に含まれるすべての整数の積が「正」「負」「ゼロ」のどれになるのかを判定する問題です。 例えば、l = -8、u = -2 が入力された場合を考えてみましょう。この範囲に含まれる整数は [-8, -7, -6, -5, -4, -3, -2] の7個で、その積は -40320 となるため、答えは「Negative(負)」になります。 解法のアプローチ 範囲内のすべての数を実際に掛け合わせる必要はありません。積の符号は各数の符号だけで決まるため、次のような条件分岐で効率的に判定できます。 l と u がどちらも正の場合:範囲内
-
Pythonで3辺から直角三角形かどうかを判定する方法
リストとして与えられた3つの辺があるとき、その3辺が直角三角形を構成しているかどうかを判定したいケースはよくあります。例えば、入力が sides = [8, 10, 6] の場合、8² + 6² = 10² が成り立つため、出力は True になります。解法の考え方:三平方の定理(ピタゴラスの定理)この問題は、数学でおなじみの三平方の定理(ピタゴラスの定理)を使えば簡単に解けます。直角三角形では、最も長い辺(斜辺)の2乗が、他の2辺の2乗の和と等しくなるという性質があります。具体的には、以下の手順で判定を行います。まず、辺のリストを昇順にソートし、最も長い辺を sides[2] に配置するsi
-
Pythonで数値がa^bの形で表現できるかどうかを判定する方法
問題概要 ある数値 n が与えられたとき、その数値を a^b(aのb乗)の形で表現できるかどうかを判定する問題です。 例えば、入力が 125 の場合を見てみましょう。125 = 5^3 と表せるため、出力は True となります(このとき a = 5、b = 3)。 解き方のアプローチ この問題は、対数(ログ)を利用することで効率的に解くことができます。手順は以下の通りです。 num が 1 の場合は true を返します(1 = 1^b と常に表現できるため)。 i を 2 から始め、「i × i ≤ num」が成り立つ間ループを回します。 各 i について val = log(num)
-
Pythonで1つ目の文字列の文字から2つ目の文字列を作成できるか判定する方法
問題の概要2つの文字列 s と t が与えられたとき、t を s に含まれる文字だけを使って作れるかどうかを判定する問題です。ここで重要なのは、s の各文字は一度しか使えないという点です。例えば、入力が s = owleh、t = hello の場合、s の文字を組み合わせることで t が作れるため、出力は True になります。解決のアプローチこの問題は「文字の出現回数(頻度)を数える」というシンプルな発想で解けます。手順は以下の通りです。s の各文字とその出現回数を記録したマップ(freq)を作成するt の先頭から順に各文字を確認するfreq[t[i]] が 0 の場合、必要な文字がもう残
-
Pythonで数値の奇数桁の合計がKで割り切れるかどうかを判定する方法
この記事では、数値 n と整数 k が与えられたとき、n の奇数番目の桁(右側から左側に向かって数えた場合)の合計が k で割り切れるかどうかを判定する方法を解説します。 問題の例 例えば、入力が n = 2416、k = 5 の場合を考えてみましょう。右から左に数えて奇数番目の桁は「4」と「6」なので、その合計は 4 + 6 = 10 となります。10 は 5 で割り切れるため、出力は True になります。 解決の手順 この問題は、以下のステップで解くことができます。 合計値を格納する変数 total を 0、桁位置を表す変数 pos を 1 で初期化します。 n が 0 より大きい
-
Pythonで文字列の平均文字が存在するかどうかを確認する方法
英数字を含む文字列 s が与えられたとき、その文字列の「平均文字」が存在するかどうかを判定し、存在する場合はその文字を返すプログラムを作成します。ここでいう平均文字とは、文字列内の各文字のASCII値の平均を計算し、その小数点以下を切り捨てた値に対応する文字のことです。 問題の例 例えば、入力が s = pqrst の場合、出力は r になります。これは、各文字のASCII値の平均が以下のように計算されるためです。 (112 + 113 + 114 + 115 + 116) / 5 = 570 / 5 = 114 ASCII値 114 に対応する文字は r なので、答えは r となります。 解
-
Pythonで特定の位置のビットがセットされているかどうかを判定する方法
プログラミングにおいて、ある整数 n の特定のビットが 1(セット) なのか 0(未セット) なのかを判定したい場面はよくあります。本記事では、Pythonを使って k番目のビット がセットされているかどうかを効率的に確認する方法を解説します。ここでいう k番目のビットは、最下位ビット(右端)から数えて 何番目かを意味します。 問題の概要 例として、n = 18、k = 2 が入力された場合を考えてみましょう。18を2進数で表すと 10010 となります。右から2番目のビットは 1 であるため、出力は「Set」となります。 解決のアプローチ この問題は、ビット演算(右シフトと論理積)を組み合わ
-
Pythonで文字列内の各文字の出現回数が素数かどうかを判定する方法
文字列 s が与えられたとき、s に含まれる各文字の出現回数がすべて素数であるかどうかを判定します。 たとえば、入力が s = apuuppa の場合を見てみましょう。この文字列には a が 2 個、p が 3 個、u が 2 個含まれています。2 も 3 も素数であるため、出力は True になります。 解決のアプローチ この問題は、次の手順で解くことができます。 頻度マップの作成: 各文字とその出現回数を対応付けたマップ(辞書)を作成します。 素数判定: マップ内の各文字について、出現回数が 0 より大きく、かつ素数でない場合は False を返します。 結果の返却: すべての文字の出現
-
Pythonで与えられた数値がユークリッド数(Euclid Number)かどうかを判定する方法
ユークリッド数とは? ある整数 n が与えられたとき、それがユークリッド数であるかどうかを判定することを考えます。ユークリッド数とは、次の式で表すことができる整数のことです。 n = Pn + 1 ここで Pn は「最初の n 個の素数の積」を意味します。 例として、入力が n = 211 の場合を考えてみましょう。211 は次のように表せるため、出力は True になります。 211 = (2 × 3 × 5 × 7) + 1 解決のためのアプローチ この問題は、以下の手順で解くことができます。 上限値 MAX を 10000 に設定し、空の素数リスト primes を用意します。 関数
-
Pythonで与えられた数値がワグスタッフ素数かどうかを判定する方法
ワグスタッフ素数とは? ある数値 n が与えられたとき、その数がワグスタッフ素数(Wagstaff prime)であるかどうかを判定することを考えます。ワグスタッフ素数とは、次の形式で表される素数のことです。 (2q + 1) / 3 ここで q は奇素数(2 以外の素数)でなければなりません。 具体例での確認 たとえば、入力が n = 683 の場合、出力は True になります。これは、683 を次のように表せるためです。 683 = (211 + 1) / 3 = 2049 / 3 この場合 q = 11 であり、11 は奇素数なので、683 はワグスタッフ素数であることがわかります。