Python

 Computer >> コンピューター >  >> プログラミング >> Python
  1. 【Python】K未満となる2数の和の最大値を求める方法

    問題の概要整数の配列 A と整数 K が与えられたとき、i < j を満たす組み合わせの中で、A[i] + A[j] = S かつ S < K となるような最大の S を求めます。条件を満たす i と j のペアが存在しない場合は -1 を返します。たとえば、A = [34,23,1,24,75,33,54,8]、K = 60 の場合、34 と 24 を選ぶことで合計 58 が得られ、これは 60 未満です。他のどのペアよりも大きいため、出力は 58 となります。解法のアプローチこの問題は、すべてのペアを総当たりで確認するシンプルな手法で解くことができます。手順は以下の通りです。答

  2. Pythonで指定した月の日数を求める方法(うるう年対応)

    はじめにある年 Y と月 M が与えられたとき、その年・月に含まれる日数を返すプログラムを考えてみましょう。たとえば Y = 1992、M = 7 の場合は 31 日、Y = 2020、M = 2 の場合は 2020 年がうるう年であるため 29 日となります。解き方の手順この問題は、次のステップで解決できます。月が 2 月(m = 2)の場合:その年がうるう年であれば 29 を返し、そうでなければ 28 を返す[1, 3, 5, 7, 8, 10, 12] という要素を持つ配列(31 日ある月のリスト)を作成するm がこのリストに含まれていれば 31 を返し、それ以外の場合は 30 を返すう

  3. Pythonで文字列から母音を削除する方法をわかりやすく解説

    問題の概要文字列が与えられたとき、その中からすべての母音(a, e, i, o, u)を取り除くことを考えてみましょう。例えば、文字列が「iloveprogramming」である場合、母音を削除すると結果は「lvprgrmmng」になります。解決のための手順この問題は、以下の手順に従うことで解決できます。母音「a, e, i, o, u」を格納したリストを作成するリスト内の各母音に対して、文字列内の該当する文字を空文字列に置き換える実装例理解を深めるために、実際のコードを見てみましょう。class Solution(object): def removeVowels(self, s):

  4. Pythonでリスト内の最大の一意の数を求める方法

    数値のリストが与えられたとき、その中で一度だけ出現する要素のうち最大のものを返す問題を考えてみましょう。該当する要素が存在しない場合は -1 を返します。例えば、リストが [5,2,3,6,5,2,9,6,3] の場合、9 は一度しか現れないため、出力は 9 となります。 解決のアプローチ この問題は、辞書(ハッシュマップ)を使うことで効率的に解くことができます。手順は以下の通りです。 各要素を順番に確認し、辞書に格納します。要素がまだ辞書に存在しない場合は新しいエントリを作成し、すでに存在する場合はカウント値を1つ増やします。 次に辞書全体を走査し、カウントが 1 になっているキー(= 一

  5. Pythonでアームストロング数(Armstrong Number)を判定する方法をわかりやすく解説

    アームストロング数とは?アームストロング数(Armstrong Number)とは、k桁の数 N の各桁の数字を k 乗した値の合計が、元の数 N と一致する数のことです。例えば、153 は 3桁の数であり、各桁の 3乗の和を計算すると以下のようになります。1³ + 5³ + 3³ = 1 + 125 + 27 = 153合計が元の数 153 と一致するため、153 はアームストロング数です。この記事では、与えられた数がアームストロング数であれば true を、そうでなければ false を返すプログラムを Python で実装します。解法のアルゴリズムアームストロング数の判定は、次の手順で行

  6. Pythonでソート済み配列内の数値が過半数要素(マジョリティ要素)かどうかを判定する方法

    問題概要 非降順(昇順)にソートされた整数配列 nums と、ある数値 target が与えられます。この target が「過半数要素(マジョリティ要素)」であるかどうかを判定してください。ここで、長さ N の配列における過半数要素とは、配列内に N/2 回より多く出現する要素のことを指します。 例えば、配列が [2,4,5,5,5,5,5,6,6] で target が 5 の場合を考えてみましょう。配列の長さは 9 なので、9/2 = 4.5 より多く出現すれば過半数要素です。実際、5 は 5 回出現しているため条件を満たし、出力は true になります。 解法のアプローチ:二分探索の

  7. Pythonで解く単一列キーボード問題:タイピングにかかる時間の計算方法

    問題の概要すべてのキーが1列に並んだ特殊なキーボードを想像してください。キーボードのレイアウトは、長さ26の文字列(インデックスは0から25)で表され、最初は指がインデックス0の位置にあるものとします。文字を入力するには、次に入力したい文字のインデックスまで指を移動させる必要があります。このとき、インデックスiからjへ指を移動するのにかかる時間は|i − j|で表されます。そこで、指定された文字列を1本の指で入力するのにかかる合計時間を求める関数を定義します。例えば、キーボードのレイアウトが「abcdefghijklmnopqrstuvwxyz」で、入力したい単語が「hello」の場合、出力は

  8. Pythonで解くダイエットプランのパフォーマンス問題 ― スライディングウィンドウによる効率的な実装

    ダイエット中の人が i 日目に摂取したカロリーを calories[i] と表します。整数 k が与えられたとき、連続する k 日間の各区間(calories[i], calories[i+1], ..., calories[i+k-1]、ただし 0 <= i <= n-k)について、その期間の合計カロリー T を計算し、次のルールに従ってポイントを評価します。T が下限(lower)より小さい場合:ダイエットの成果が不良のため、1ポイント減点T が上限(upper)より大きい場合:ダイエットの成果が良好なため、1ポイント加点それ以外の場合:正常な範囲内のため、ポイント変動なしダイ

  9. Pythonで10進数をHexspeak(ヘックススピーク)表現に変換する方法

    10進数の数値は、まず大文字の16進数文字列に変換し、その後、数字の 0 をすべて文字 O に、数字の 1 をすべて文字 I に置き換えることで、Hexspeak(ヘックススピーク)表現へと変換できます。この表現が有効とみなされるのは、その結果が {A, B, C, D, E, F, I, O} の集合に含まれる文字だけで構成されている場合のみです。ここで、10進整数 N を表す文字列 num が与えられます。N のHexspeak表現が有効であればそれを返し、無効な場合は ERROR を返す必要があります。たとえば num = 257 の場合、257 は16進数で 101 となるため、出力は

  10. Pythonで解く4Sum II|4つのリストから合計が0になる組み合わせを数える方法

    問題の概要 整数値を持つ4つのリスト A、B、C、D が与えられたとき、A[i] + B[j] + C[k] + D[l] がゼロになるようなタプル (i, j, k, l) の個数を求めるのがこの問題です。 すべてのリストは同じ長さ N(0 ≤ N ≤ 500)を持ち、各整数は −228 から 228 − 1 の範囲に収まります。また、答えは最大でも 231 − 1 であることが保証されています。 具体例 たとえば、入力が A = [1, 2]、B = [-2, -1]、C = [-1, 2]、D = [0, 2] の場合、出力は 2 になります。条件を満たすタプルは次の2つです。 (0,

  11. 【Python】配列の全要素を等しくするための最小移動回数を求めるアルゴリズム

    問題の概要 空でない整数型の配列が与えられたとき、すべての要素を等しい値に揃えるために必要な「最小の移動回数」を求める問題を考えてみましょう。ここでいう1回の移動とは、選択した要素を +1(増加) または -1(減少) させる操作のことです。 たとえば、配列が [1, 2, 3] の場合を考えます。このとき出力は 2 になります。理由は以下の通りです。 1 を 1 回増加させて 2 にする 3 を 1 回減少させて 2 にする 2 はそのまま 合計 2 回の移動ですべての要素を 2 に揃えられるため、答えは 2 となります。 解決のためのアプローチ この問題を効率的に解く鍵となるのが中央

  12. Pythonで文字列中の回文部分文字列の数を数える方法

    問題の概要ある文字列が与えられたとき、その文字列に含まれる回文(パリンドローム)部分文字列がいくつあるかを数える問題を考えてみましょう。ここで重要なのは、開始インデックスまたは終了インデックスが異なる部分文字列は、たとえ同じ文字列で構成されていても別々の部分文字列として数えるという点です。例えば、入力が aaa の場合、出力は 6 になります。これは「a」「a」「a」「aa」「aa」「aaa」という6つの回文部分文字列が存在するためです。解決のアプローチこの問題は、以下の手順に従って解くことができます。カウンターを 0 で初期化します。i を 0 から文字列の長さまで繰り返します。j を i

  13. Pythonで解く「最大スワップ」問題:1回の桁入れ替えで最大の数を作るアルゴリズム

    問題の概要 非負整数が与えられたとき、2つの桁を高々1回だけ入れ替えることで作れる最大の数を求めます。例えば、入力が 2736 の場合、出力は 7236 になります。これは先頭の「2」と次の「7」を入れ替えた結果です。 アルゴリズムの考え方 基本となるアイデアはシンプルです。元の数の各桁を降順に並べ替えたものが理論上の最大形になります。そこで、降順ソートした配列と元の配列を左から順に比較し、初めて一致しなくなった位置を見つけます。その位置にある小さい桁を、後続の桁の中で同じ大きい数字の最も右側(最下位)の出現箇所と入れ替えることで、数値を最大化できます。できるだけ下位の桁と交換するのがポイン

  14. Pythonで解く「鍵と部屋」問題:BFSで全ての部屋を訪問できるか判定する方法

    N個の部屋があり、部屋0からスタートするとします。各部屋には0、1、2、…、N-1の中から一意な番号が割り当てられており、それぞれの部屋には次の部屋へ入るための鍵がいくつか置かれていることがあります。言い換えると、各部屋iにはrooms[i]という鍵のリストが存在し、各鍵rooms[i][j]は[0, 1, …, N-1]の範囲の整数です(ここでNは部屋の総数)。鍵rooms[i][j] = vは、番号vの部屋を開けられることを意味します。例えば、入力が[[1], [2], [3], []]であれば、出力はtrueになります。問題を解く前に押さえておきたいポイント最初、すべての部屋は施錠されて

  15. Pythonで繰り返し文字を含まない長さKの部分文字列の個数を求める方法

    問題の概要 文字列 S と整数 K が与えられたとき、「同じ文字が一度も繰り返されない」長さ K の部分文字列がいくつ存在するかを求める問題です。 例えば、S = heyfriendshowareyou、K = 5 の場合、答えは 15 になります。条件を満たす部分文字列は次の15個です。 [heyfr, eyfri, yfrie, frien, riend, iends, endsh, ndsho, dshow, showa, howar, oware, warey, areyo, reyou] 解法の考え方:スライディングウィンドウ すべての開始位置に対して毎回部分文字列を調べると非効率

  16. Pythonで指定したインデックスリストの要素をまとめて取得する方法

    Pythonでは、リストの個々の要素へアクセスする際に、角括弧 [] とインデックス番号を使用します。しかし、複数のインデックスをまとめて指定して要素を取り出したい場合には、この方法をそのまま使うことができません。そこで、以下に挙げるアプローチを活用します。方法1:2つのリストを使う元のリストとは別に、取得したいインデックスをもう1つのリストとして用意します。そして、リスト内包表記(forループ)でインデックスのリストを順に処理し、その値を元のリストに渡すことで、対応する要素を取り出します。サンプルコードgiven_list = [Mon, Tue, Wed, Thu, Fri] index_

  17. 【Python】指定した文字セットから作成できる単語を抽出する方法

    はじめに この記事では、あらかじめ用意された文字セットから作成可能な単語を抽出して出力するPythonプログラムを紹介します。 入力には、次の2つのリストを使用します。 参照用の単語リスト: 候補となる単語が格納されたリスト 文字リスト: 単語を構成するために使用できる文字のリスト プログラムの仕組み 以下のプログラムでは、2つの関数を定義しています。 Possible_Words(): 単語を構成する各文字とその出現回数を辞書形式で返す関数 character_set(): 各単語が、指定された文字リストだけを使って構成できるかどうかを判定し、条件を満たす単語を出力する関数 char

  18. Pythonでリスト内のすべての値が指定値より小さいかどうかを判定する方法

    Pythonによるデータ分析では、1つの数値と複数の値を含むリストを比較する場面によく出会います。例えば、「ある基準値がリスト内のすべての要素よりも小さいかどうか」を確認したいケースです。本記事では、この判定を実現するための2つの方法——forループを使う方法とall()関数を使う方法——を、具体的なサンプルコードとともに解説します。方法1:forループを使うまずは最も基本的なアプローチです。リストを反復処理しながら、指定した値とリスト内の各要素を順番に比較します。すべての要素との比較で条件が成立すれば「yes」を出力し、1つでも条件を満たさない要素があればその時点で処理を中断して「No」を出

  19. Pythonで辞書が空かどうかを判定する方法【if文・bool()関数】

    データ分析を進めていると、空の辞書を扱う場面に遭遇することがあります。この記事では、Pythonで辞書が空かどうかを確認するための代表的な2つの方法を、実際のコード例と実行結果をもとにわかりやすく解説します。方法1:if文で判定するPythonでは、if文の条件式に辞書をそのまま渡すことができます。辞書に要素が1つでも含まれていればTrue、空であればFalseと評価されるため、特別な関数を使わずに空判定が可能です。コード例dict1 = {1:Mon,2:Tue,3:Wed} dict2 = {} # 対象となる辞書 print(元の辞書 : , dict1) print(元の辞書 : ,

  20. Pythonで文字列内の各文字の出現頻度がすべて異なるかどうかを確認する方法

    この記事では、Pythonを使って与えられた文字列の中に含まれる各文字の出現頻度(カウント)を求める方法を解説します。さらに、その頻度の中に同じ値を持つ文字が2つ以上存在するかどうか、つまり「すべての文字の頻度が互いに異なっているか」どうかを判定する方法まで紹介します。処理は大きく2つのステップに分けて行います。まず最初のプログラムでは、単純に各文字の頻度を数えるところから始めましょう。ステップ1:各文字の出現頻度を数えるここでは、入力された文字列に含まれる各文字の出現回数を調べます。まず空の辞書(dict)を用意し、文字列を1文字ずつ走査しながら、その文字がすでに辞書のキーとして存在する場合

Total 8994 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:135/450  20-コンピューター/Page Goto:1 129 130 131 132 133 134 135 136 137 138 139 140 141