Python

 Computer >> コンピューター >  >> プログラミング >> Python
  1. Pythonでスタック操作をシミュレートして最終結果を求める方法

    文字列のリスト ops が与えられ、各要素は以下のいずれかの操作を表すとします。非負の整数値: その値をスタックにプッシュするPOP: スタックの最上位要素を削除するDUP: 最上位の要素をもう一度スタックに挿入し、複製する+: 上位2つの要素をポップし、その合計値をスタックにプッシュする-: 上位2つの要素をポップし、(最上位要素 − その直下の要素) の結果をスタックにプッシュするすべての操作を適用した後の、スタックの最上位要素を求めるのが目的です。もし操作が無効な場合(たとえば空のスタックからPOPしようとした場合など)は -1 を返します。動作例入力が ops = [5, 2, POP

  2. Pythonで解く飛行機の座席シャッフル問題:最後の乗客が指定席に着席できる確率を求める

    問題の概要 整数 n が飛行機の座席数を表しているとします。ここで、最初の乗客がチケットを紛失してしまったため、ランダムに座席を選んで着席することになりました。それ以外の乗客は各自の指定席を持っていますが、もし自分の席がすでに埋まっていた場合は、空いている座席の中からランダムに選んで着席します。このとき、最後の乗客が自分の指定席に着席できる確率を求めるのがこの問題です。 例えば、n = 5 の場合、出力は 0.5(50%)になります。実は、乗客が2人以上いる場合、答えは常に一定で 50% です。最終的には「正しい席に着席できるか、できないか」の2つの結果しか存在せず、両者が対称なため確率は常に

  3. Pythonで1文字だけ異なる単語のペアが存在するかどうかを判定するプログラム

    問題概要すべて同じ長さの小文字文字列からなるリスト words が与えられたとします。このリストの中に、1文字だけが異なる2つの文字列が存在するかどうかを判定するのが今回の課題です。例えば、入力が words = [seed, pick, lick, root, live] の場合、「pick」と「lick」は先頭以外の文字が完全に一致しており、1文字だけ異なるため、出力は True になります。解決アプローチこの問題は、各単語から1文字をワイルドカード「*」に置き換えたパターンを生成し、そのパターンがすでに登録済みかどうかを確認することで効率的に解決できます。手順は以下の通りです。空のセット

  4. Pythonの等価ペアを使って文字列が回文かどうかを判定する方法

    問題の概要 小文字の英字からなる文字列 s と、ペアのリスト pairs が与えられているとします。pairs の各要素は2つの文字列 [a, b] から構成され、文字 a と b は同じものであるとみなされます。 例えば、[a, b] と [b, c] という2つのペアが存在する場合、「a と b は等価」であり「b と c も等価」であるため、推移的に「a と c も等価」と考えることができます。また、任意の値は常にそれ自身と等価です。このような等価関係のもとで、文字列 s が回文として成立するかどうかを判定するのが本問題です。 入力例と考え方 s = raceckt、pairs = [

  5. Pythonで幸せにできる顧客の最大人数を求めるプログラム

    問題概要 同じ長さを持つ2つのリスト customers(毎分の来店者数)と mood(客の機嫌)、および整数 k が与えられます。毎分 i には customers[i] 人の客が店を訪れ、mood[i] = 1 のときはその客たちが幸せであること、mood[i] = 0 のときは悲しいことを表します。ここで、連続する長さ k の区間をひとつ選び、その間の mood をすべて 1 に変更できます。最終的に幸せにできる人数の最大値を求めましょう。 例として、入力が customers = [2, 3, 6, 6, 3]、mood = [1, 1, 0, 0, 0]、k = 2 の場合を考えてみ

  6. Pythonで有効な等差数列となるクエリの数を効率的に求めるプログラム

    この記事では、Pythonを使って「部分列が等差数列になっているか」を判定する複数のクエリを効率的に処理する方法を解説します。 問題の概要 数値のリスト nums と、クエリのリスト queries が与えられます。各クエリは [i, j] の形式で表され、「nums[i] から nums[j] まで(両端を含む)の部分列は等差数列か?」という問い合わせを意味します。最終的な目標は、true(等差数列である)を返すクエリの個数を求めることです。 入力例と出力例 たとえば、次のような入力が与えられたとします。 nums = [2, 4, 6, 8, 7, 6, 5, 2] queries

  7. 【Python】方向文字列のバランスを取る:各方向がn/4回ずつ出現するようにする最短置換区間の求め方

    文字列 s には、「N」(北)、「S」(南)、「W」(西)、「E」(東)の4種類の方向文字が含まれているとします。文字列の長さを n としたとき、4つの方向がそれぞれちょうど n/4 回ずつ出現するように書き換えられる、最短の部分文字列(連続区間)の長さを求めるのがこの問題です。 例として、入力が s = NNSWWESN の場合を考えてみましょう。n = 8 なので n/4 = 2 です。末尾の「N」を「E」に1文字だけ書き換えれば、すべての方向が2回ずつ出現するバランスの取れた文字列になります。したがって、出力は 1 です。 アルゴリズムの考え方 この問題はスライディングウィンドウ(尺取

  8. Pythonで全てのボールを各位置に集めるための合計移動距離を効率的に求めるアルゴリズム

    0と1のみを含むバイナリリストnumsがあるとします。0は空のセル、1はボールが入っているセルを表します。ここで、numsと同じサイズの新しいリストLを作成し、L[i]にはすべてのボールを位置iに集めるために必要な合計移動距離を格納します。インデックスjからインデックスiへボールを移動する際の距離は |j - i| で表されます。 例えば、入力が nums = [1, 1, 0, 1] の場合、出力は [4, 3, 4, 5] になります。これは以下のように計算できます。 L[0] = |0 - 0| + |1 - 0| + |3 - 0| L[1] = |0 - 1| + |1 - 1

  9. Pythonでバイナリリスト内の合計がkとなるサブリストの個数を求めるプログラム

    問題の概要0と1のみで構成されるバイナリリストが与えられたとします。さらに別の入力として整数 k が与えられ、要素の合計がちょうど k に一致するサブリスト(連続する部分配列)の個数を求める必要があります。例えば、入力が nums = [1, 0, 0, 1, 1, 1, 0, 1]、k = 3 の場合、出力は 8 になります。これは、条件を満たすサブリストとして [1,0,0,1,1]、[0,0,1,1,1]、[0,0,1,1,1,0]、[0,1,1,1]、[0,1,1,1,0]、[1,1,1]、[1,1,1,0]、[1,1,0,1] の8つが存在するためです。解決のためのアプローチこの問題

  10. Pythonで指定範囲内のすべての数値のビットごとのAND(論理積)を求めるプログラム

    2つの整数 start と end が与えられたとき、閉区間 [start, end](両端を含む)に含まれるすべての数値のビットごとのAND(論理積)を求めることを考えます。 例として、start = 8、end = 12 の場合を見てみましょう。8 は2進数で「1000」、12 は「1100」と表されます。したがって、 1000 AND 1001 AND 1010 AND 1011 AND 1100 を計算すると「1000」、すなわち答えは 8 になります。 解法の手順 この問題は、次の手順で解くことができます。 n := end − start + 1(範囲に含まれる数値の個数)としま

  11. Pythonでロボットが境界ボックス内に留まるかどうかを判定するプログラムの作り方

    問題の概要 文字列 s は、ロボットの動きを表す命令列です。ロボットは初期状態として座標 (0, 0) に位置し、北向きを向いています。命令列 s には以下の3種類の文字が含まれます。 F:現在向いている方向に1単位前進する L:その場で左に90度回転する R:その場で右に90度回転する ロボットがこの命令列 s を順番に無限に繰り返し実行するとき、「ロボットが決して外に出ることができない境界ボックス(有界な領域)」が平面上に存在するかどうかを判定するのがこの問題です。 入力例と出力例 入力が s = FFRFRFFRF の場合、出力は True になります。ロボットはまず北へ2単位進み

  12. Pythonで2つのリストの要素の2乗和が指定範囲内となるペアの数を効率的に求めるプログラム

    問題概要2つの数値リスト nums1 と nums2、および下限値 lower と上限値 upper が与えられます。このとき、次の条件を満たすペア (i, j) の総数を求めるのが目的です。lower ≤ nums1[i]² + nums2[j]² ≤ upper入力例たとえば、nums1 = [5, 3, 2]、nums2 = [8, 12, 6]、lower = 10、upper = 50 という入力の場合、答えは 2 になります。条件を満たすのは (1, 2) と (2, 2) の2組だからです。10 ≤ 3² + 6² = 45 ≤ 5010 ≤ 2² + 6² = 40 ≤ 50解

  13. Pythonで水平方向のレンガ敷き詰めパターンの総数を求めるプログラム

    問題の概要数値のリスト bricks と、2つの値 width(幅)および height(高さ)が与えられているとします。リストの各要素 bricks[i] は、長さが bricks[i] 単位、幅が1単位のレンガを表します。このとき、指定された幅と高さの領域をレンガで完全に敷き詰める方法が何通りあるかを求める必要があります。なお、レンガは何度でも再利用できますが、水平方向にのみ配置できるという制約があります。入力例たとえば、入力が bricks = [2, 1]、width = 3、height = 2 の場合、出力は 9 になります。これは、幅3・高さ2の領域を長さ1と長さ2のレンガで敷き

  14. Pythonで文字列を指定位置数だけシフトした後の最終的な文字列を取得するプログラム

    小文字のみで構成された文字列 s と、s と同じ長さの整数リスト shifts が与えられているとします。shifts の各要素 shifts[i] は、文字列 s の先頭から i + 1 文字目までを、それぞれ shifts[i] だけシフトすることを意味します。シフトによって z を超えた場合は a に戻って(ラップアラウンドして)続きます。このとき、すべてのシフトを適用した後の最終的な文字列を求める必要があります。 例として、入力が s = tomato、shifts = [2, 5, 2, 3, 7, 4] の場合を考えてみましょう。まず先頭の1文字を2つシフトすると t は v にな

  15. Pythonで括弧の各深さごとの文字数をカウントするプログラムの作成方法

    文字列 s が与えられます。この文字列は「X」「(」「)」の3種類の文字のみで構成されており、括弧は必ずバランスが取れていて、その間に「X」が含まれています。また、括弧は再帰的にネストしている場合もあります。 この課題では、最も浅い深さから最も深い深さへ向かって、各括弧の深さごとに「X」の個数を求めます。 入力例と出力例 たとえば、入力が s = (XXX(X(XX))XX) の場合、出力は [5, 1, 2] になります。 深さ0(最も外側の括弧の中)には「X」が5個 深さ1には「X」が1個 深さ2(最も内側の括弧の中)には「X」が2個 解き方のアプローチ この問題は、次の手順で解くこと

  16. 循環リストに一方向のみのサイクルが存在するか判定するPythonプログラム

    問題概要 循環リスト nums を考えてみましょう。このリストでは、最初の要素と最後の要素が互いに隣接しています。任意のインデックス i から出発し、nums[i] が正の値であれば nums[i] ステップだけ前進し、負の値であれば後退します。このとき、「長さが1より大きく、かつ経路が前方への移動のみ、または後方への移動のみで構成される」サイクル(ループ)が存在するかどうかを判定する必要があります。 例えば、入力が nums = [-1, 2, -1, 1, 2] の場合、前方への経路 [1 → 3 → 4 → 1] が存在するため、出力は True になります。 解法のアプローチ この問

  17. Pythonで指定されたサーバーコアですべてのタスクを実行できるか判定する方法

    2つのリスト cores と tasks があるとします。cores[i] は i 番目のサーバーで利用可能なコア数を表し、tasks[i] はそのタスクの実行に必要なコア数を表します。各タスクは必ず1台のサーバーでのみ実行されなければならず、1台のサーバーが複数のタスクを担当することも許容されます。ここでの目的は、与えられたコア数ですべてのタスクを実行できるかどうかを判定することです。たとえば、入力が cores = [10, 7]、tasks = [7, 3, 2, 2, 1] の場合、出力は True になります。これは、tasks[0](7)と tasks[1](3)をコア数10の最初

  18. Pythonでコインマトリックスから収集できる最大コイン数を求めるプログラム

    問題の概要各セル matrix[r, c] にコインが置かれている 2 次元マトリックスを考えます。あるセル matrix[r, c] のコインを回収すると、上下の行(r - 1 行目と r + 1 行目)にあるすべてのコイン、さらに左右に隣接するセル matrix[r, c + 1] と matrix[r, c - 1] のコインが消えてしまいます。この制約のもとで、回収できるコインの合計の最大値を求めるのが目的です。たとえば、入力が次のような場合を考えてみましょう。28761010425923この場合の出力は 26 になります。8・6・9・3 のコインが置かれたセルを選べば、合計が 26

  19. 【Python】グラフ内の2つのノードに共通して到達可能なノードが存在するかを判定するプログラム

    問題概要 有向グラフのエッジリストが与えられます。グラフは n 個のノードから構成され、ノード名は 0 から n-1 までです。さらに、2つの整数値 a と b が与えられます。ここで、「あるノード c から a への経路と、c から b への経路がどちらも存在する」という条件を満たすノード c が存在するかどうかを判定するのが課題です。 例として、下図のようなグラフを考えてみましょう。 a = 2、b = 3 の場合、出力は True になります。これは c = 0 とおくと、0 から 2 への経路と 0 から 3 への経路がどちらも存在するためです。 解法の考え方:逆グラフとDFSの組

  20. Pythonでランレングス符号化ベクトルの内積を求めるプログラム

    問題概要 ランレングス符号化(Run-Length Encoding / RLE)は、連続して現れる同じ値を「個数」と「値」のペアで表現するコンパクトなデータ形式です。例えば、ベクトル [1, 1, 1, 2, 2, 2, 2] は「1が3個続き、その後に2が4個続く」という意味で [3, 1, 4, 2] と表されます。 本記事では、この形式で与えられた2つのベクトル nums1 と nums2 の内積(ドット積)を求めるPythonプログラムを紹介します。内積とは、2つのベクトルの対応する要素同士を掛け合わせ、その総和を取った値のことです。 具体例で確認 入力が nums1 = [2,

Total 8994 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:388/450  20-コンピューター/Page Goto:1 382 383 384 385 386 387 388 389 390 391 392 393 394