Python

 Computer >> コンピューター >  >> プログラミング >> Python
  1. 【Python】単語検索II(Word Search II)をTrieとDFSで効率的に解く方法

    はじめに 本記事では、2次元の文字ボードと単語リストが与えられたとき、ボード上から辞書内のすべての単語を見つけ出す「単語検索II(Word Search II)」という定番アルゴリズム問題を、Pythonで解いていきます。 この問題のルールは次の通りです。 各単語は、上下左右に隣接するセルの文字を順番につなげて構成する必要がある 同じセル(マス)を1つの単語の中で複数回使用することはできない 例えば、後述のような4×4のボードと単語リスト [oath, pea, tea, rain] が入力として与えられた場合を考えてみましょう。 解法のアプローチ:Trie(トライ木)+ DFSバックト

  2. Pythonで整数を英語の単語に変換する方法を解説

    0から231 − 1までの範囲にある任意の整数を、英語の単語表現に変換することを考えてみましょう。たとえば、数値が512であれば、結果は「Five hundred twelve」となります。解決のためのアプローチこの問題を解くには、以下の手順に従います。まず「less_than_20」というリストを定義します。ここには1から19までのすべての英単語を格納します。次に「tens」という配列を用意し、Twenty(20)、Thirty(30)などNinety(90)までの十の位の単語を格納します。さらに「thousands」という配列を作り、Thousand(千)、Million(百万)、Bill

  3. Pythonで作る強力なパスワードチェッカー:最小変更回数を求めるアルゴリズム

    強力なパスワードの条件とは?文字列としてパスワードが与えられたとき、そのパスワードを「強力なパスワード」にするために必要な最小の変更回数を求める問題を考えてみましょう。強力なパスワードとみなされるには、以下の条件をすべて満たす必要があります。長さは6文字以上20文字以内であること小文字を少なくとも1つ、大文字を少なくとも1つ、数字を少なくとも1つ含むこと同じ文字が3つ以上連続してはならない(例:「aaa」「PPP」「888」など)たとえば入力が aa26bbb の場合、必要な変更は1回です。このパスワードには大文字が含まれておらず、さらに「b」が3つ連続しているため、どれか1つの「b」を大文字

  4. Pythonで最小の「良い基数(グッドベース)」を二分探索で求める方法

    問題の概要 整数 n が与えられたとき、n を k 進法で表した際にすべての桁が 1 になるような k(k ≥ 2)を「良い基数(グッドベース)」と呼びます。数値 n が文字列として与えられるので、最小の良い基数を文字列として返します。 例えば n = 121 の場合、答えは 3 です。121 を 3 進法で表すと 11111 となり、すべての桁が 1 になるためです(実際に 1 + 3 + 9 + 27 + 81 = 121 が成り立ちます)。 解法のアプローチ この問題は二分探索を用いることで効率的に解けます。考え方のポイントは次の通りです。 基数 k・桁長 length のときの「

  5. Pythonで解く「グリッドイルミネーション」問題 ― 行・列・斜めの照光判定を効率化する方法

    問題の概要 N×N のマス目からなるグリッドがあり、各マス (x, y) にはランプが1つずつ設置されています。初期状態では一部のランプのみが点灯しており、点灯している i 番目のランプの位置は lamps[i] で与えられます。 点灯しているランプは、それぞれ同じ行(x軸方向)、同じ列(y軸方向)、そして両方の斜め方向にあるすべてのマスを照らします。 i 番目のクエリ queries[i] = (x, y) に対しては、マス (x, y) が照らされていれば 1、そうでなければ 0 を返します。さらに、各クエリの処理後には、そのマス自身および周囲8方向に隣接するマスにあるランプをすべて消灯し

  6. Pythonで巨大な迷路から脱出できるかを判定するアルゴリズム

    問題の概要 100万行 × 100万列という非常に大きなグリッドを考えます。グリッド上には、移動できない「ブロックされたセル」のリストが与えられています。 私たちはスタート地点(source)から出発し、ゴール地点(target)を目指します。1回の移動ごとに、ブロックされていないセルの中から上下左右に隣接するマスへ進むことができます。 求めたいのは、「一連の移動によってゴールに到達することが可能かどうか」の判定です。 たとえば、入力が blocked = [[0,1],[1,0]]、source = [0,0]、target = [0,3] の場合、出力は False になります。 解法の

  7. Pythonで文字列形式のリストをlist型に変換する3つの方法(eval / ast / json)

    データ処理を行っていると、受け取ったデータが文字列として格納されているものの、その中身の構造は実はPythonのリストになっているというケースに遭遇することがあります。本記事では、こうした文字列形式のリストを、そのままデータ操作に利用できる本物のPythonのリスト(list型)へ変換する方法を、3つのアプローチから解説します。 方法1:eval関数を使う eval関数は、引数として渡された文字列をPythonの式として評価し、その結果を返します。そのため、文字列形式のリストをそのままevalに渡すだけで、Pythonのリストを取得できます。 サンプルコード stringA = [Mon,

  8. Pythonで文字列をDateTimeに変換する方法|datetime⇔文字列の相互変換を徹底解説

    Pythonには、日付や時刻を扱うための強力な機能が標準で用意されています。本記事では、決まった書式を持つ文字列を datetime オブジェクトに変換する方法と、その逆に datetime オブジェクトを文字列へ戻す方法を、具体的なコード例とともに解説します。 strptime() を使って文字列をdatetimeに変換する datetime モジュールの strptime() 関数を使うと、書式指定子(フォーマットコード)を指定することで、文字列を datetime オブジェクトへ変換できます。元の文字列の並びに合わせて正しい書式指定子を組み合わせるのがポイントです。 主な書式指定子 よく

  9. Pythonで2つのリストから辞書を作成する3つの方法【for文・range・zip】

    Pythonのリストは複数の値を順番に格納するデータ構造である一方、辞書(dict)は「キー」と「値」がペアになったキーバリューペア(key-value pair)を格納します。本記事では、それぞれ別々に用意された2つのリスト(キー用リストと値用リスト)を組み合わせて、1つの辞書に変換する代表的な3つの方法を、サンプルコードと実行結果つきでわかりやすく解説します。方法1:forループとremove()を使う方法ネストした(入れ子構造の)2重forループを使用する方法です。内側のループで値リストの先頭要素を取り出して辞書の値として代入し、その要素をremove()メソッドで削除しながら処理を進め

  10. Pythonでブール式を解析して評価する方法

    はじめにブール式(真偽値を扱う論理式)が与えられたとき、その式を実際に評価した結果を求める問題を考えてみましょう。この問題では、式は次のいずれかの形式で表現されます。「t」 … True に評価される「f」 … False に評価される「!(expression)」 … 内側の式の論理否定(NOT)「&(expr1,expr2,...)」 … 2つ以上の内側の式の論理積(AND)「|(expr1,expr2,...)」 … 2つ以上の内側の式の論理和(OR)具体例たとえば、入力が |(!(t),&(t,f,t)) の場合、出力は False になります。その理由を見てみましょう。!(t) は

  11. Pythonでリスト内のすべての文字列を整数に変換する方法

    プログラミングをしていると、リストの中に「5」や「-43」のように、数値を表す文字列が格納されているケースによく出会います。このようなリストでは、計算処理などを行うために、文字列の要素を実際の整数値へ変換する必要があります。本記事では、Pythonで文字列のリストを整数のリストに変換する代表的な2つの方法を、サンプルコードと実行結果とともにわかりやすく解説します。方法1:int()とリスト内包表記を使う組み込み関数 int() は、引数として渡された値が数値を表す文字列であれば、それを整数型に変換します。リスト内包表記を使えば、リストの各要素に対して int() を簡潔に適用でき、その結果を新

  12. Pythonでリスト形式の文字列を辞書に変換する方法

    Pythonでは、リストのように見える文字列を扱う場面があります。さらに、その要素が「キーと値」のペアを表している場合、辞書(dict)として扱いたくなることもあるでしょう。本記事では、このようなリスト形式の文字列を辞書へ変換する方法を、具体的なコード例とともに解説します。 split関数とスライスを使う方法 まず紹介するのは、split関数で要素をキーと値に分割し、スライスで角括弧を取り除きながら辞書内包表記で変換する方法です。文字列の先頭と末尾にある「[」「]」を[1:-1]のスライスで除外し、「, 」(カンマ+スペース)で分割した各要素をさらに「:」で区切ることで、キーと値のペアを作成し

  13. Pythonで文字列内の母音を数えて表示する方法

    文字列が与えられたとき、その中に母音(a、e、i、o、u)がそれぞれ何個含まれているかを調べるのは、Pythonプログラミングでよく使われるテクニックです。本記事では、代表的な2つのアプローチ「setを使う方法」と「fromkeysを使う方法」を、サンプルコードと実行結果あわせて解説します。set(集合)を使う方法まず文字列から重複を除いた一意な文字を抽出し、それが母音を表す文字列に含まれているかどうかを判定します。この方法では、文字列内に出現した母音の種類をひと目で確認できます。サンプルコードstringA = Tutorialspoint is best print(Given Strin

  14. Pythonで解く「最小の十分なチーム」問題:ビットマスクと動的計画法による最適解

    問題の概要 あるプロジェクトにおいて、必要なスキルのリスト req_skills と、人物のリストが与えられているとします。i番目の人物 people[i] には、その人が持っているスキルのリストが格納されています。 ここで「十分なチーム(sufficient team)」とは、req_skills 内のすべての必須スキルについて、そのスキルを持つメンバーが少なくとも1人含まれているような人物の集合として定義されます。チームは各人物のインデックスで表現でき、たとえばチームが [0, 1, 3] の場合、これは people[0]、people[1]、people[3] の3人が選ばれたことを意

  15. Pythonで辞書の値(リスト)の要素数をカウントする3つの方法

    キーと値のペアを持つ辞書の中には、値そのものがリスト型になっているものがあります。この記事では、そのような辞書に含まれるリストの要素数を合計してカウントする方法を、3つの異なるアプローチで解説します。方法1:isinstance を使うまず基本となるのが、isinstance() 関数を使って辞書の各値がリストかどうかを判定する方法です。判定結果が True の場合に、count 変数へそのリストの長さを加算していきます。サンプルコード# 辞書の定義 Adict = {Days: [Mon,Tue,wed,Thu], time: 2 pm, Subjects: [Phy,Che

  16. Pythonで解く「最長チャンク回文分解」― 両端からの貪欲法アルゴリズム

    問題の概要 ある文字列 text が与えられたとき、次の条件をすべて満たす最大の k を求める問題です。 各 a[i](i = 1〜k)は空でない文字列である 連結した a[1] + a[2] + ... + a[k] が、与えられた text と完全に一致する すべての i について a[i] = a[k+1-i] が成り立つ(前後のチャンクが対称になっている) たとえば、入力が antaprezatepzapreanta の場合、出力は 11 になります。これは次のように11個のチャンクへ分割できるためです。 (a)(nt)(a)(pre)(za)(tpe)(za)(pre)(a)(n

  17. Pythonでタプル内に含まれるリスト要素の出現回数をカウントする方法

    Pythonでは、リストとタプルを組み合わせてデータを扱う場面が多くあります。本記事では、リストの要素がタプル内にいくつ含まれているか(出現回数)をカウントする方法を、2つのアプローチから解説します。collections.Counterを使う方法まず紹介するのは、標準ライブラリcollectionsモジュールのCounterクラスを使った方法です。Counterを使うと、タプル内の各要素の出現回数を簡単に集計できます。その後、for文とin演算子を組み合わせて、リストに含まれる要素に対応するカウント値だけを合計します。コード例from collections import Counter A

  18. Pythonで文字列内の特定の文字の出現回数を数える3つの方法

    Pythonでは、ある文字列の中に特定の文字が何回出現するかを調べたい場面がよくあります。例えば、テキスト解析やデータクリーニングの際に、特定の記号や文字の頻度を把握することは重要な処理の一つです。この記事では、文字列と文字が与えられたときに、その文字が文字列内に何回繰り返し現れるかを調べる方法を、具体的なコード例とともに紹介します。方法1:range関数とlen関数を使うforループを設計し、インデックスを使って文字列内の各文字にアクセスしながら、対象の文字と一致するかどうかを1文字ずつ確認していきます。range()関数とlen()関数を組み合わせることで、文字列の左から右へ走査する際に照

  19. Pythonでリスト内の要素の出現回数をカウントする方法

    Pythonプログラミングでは、リストの中に特定の文字列(要素)が何回出現するかを調べたい場面がよくあります。本記事では、リストと検索対象の文字列が与えられたときに、その文字列がリストの要素として何個含まれているかを数える方法を、代表的な2つのアプローチで解説します。collections.Counterを使う方法collectionsモジュールのCounter関数は、リスト内の各要素の出現回数をまとめて集計してくれる便利なツールです。集計結果から、検索したい要素に対応するカウント値だけを取り出すことで、目的の出現回数を取得できます。大量のデータに対して複数の要素の出現回数を一度に調べたい場合

  20. Pythonでリスト内の特定条件に一致する要素数をカウントする方法

    この記事では、Pythonのリストから特定の条件に一致する要素だけを取り出し、その個数をカウントする方法を解説します。あらかじめ条件を設計し、その条件を満たす要素のみを選択して、件数を出力するという流れになります。ここでは、代表的な3つのアプローチを紹介します。方法1:in演算子とsum関数を組み合わせる最もシンプルな方法です。リスト内包表記の中でin演算子を使って条件に一致するかどうかを判定し、一致すれば1、しなければ0が返されます。その結果をsum関数で合計することで、条件を満たす要素の個数が求まります。サンプルコードAlist = [Mon, Wed, Mon, Tue, Thu] #

Total 8994 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:144/450  20-コンピューター/Page Goto:1 138 139 140 141 142 143 144 145 146 147 148 149 150