-
Javaで総利益を最大化するアルゴリズム:LCMを活用した効率的な計算方法
本記事では、5つの整数変数 Num、P1、P2、profit_P1、profit_P2 が与えられたとき、[1, Num] の範囲に含まれる自然数全体から得られる総利益を最大化する問題を解説します。 ルールは以下のとおりです。 範囲内のある正の整数が P1 で割り切れる場合、利益は profit_P1 だけ増加します。 同様に、その数が P2 で割り切れる場合、利益は profit_P2 だけ増加します。 ただし、1つの正の整数から得られる利益は最大1回しか加算できません(両方で割り切れる数は、どちらか一方の側でカウントします)。 例で理解しよう 例1 入力: int num = 4,
-
Javaで実装するMeet in the Middle(半分全列挙)アルゴリズム ― 合計値を超えない最大部分集合和の求め方
配列と合計値が与えられたとき、「与えられた合計値を超えない最大の部分集合和」を求めるのがこの問題です。配列の構造上、単純な全探索(ブルートフォース)や一般的な分割統治法をそのまま適用することが難しいため、より効率的なアプローチが必要になります。 それでは、具体的な入出力シナリオをいくつか見ていきましょう。 具体例で理解する 入力 − long arr[] = { 21, 1, 2, 45, 9, 8 }、long given_Sum = 12 出力 − 与えられた合計値以下となる最大部分集合和 --> 12 解説 − 配列を2つの部分集合に分割します。前半には n/2 個の要素を、後半
-
Javaで指定された分割点に基づき配列を部分配列に分割した際の最大部分配列和を求める方法
問題の概要 2つの整数配列が与えられます。1つは合計を計算する対象となる要素を含む配列、もう1つは配列を部分配列(部分集合)へ分割するための分割点を含む配列です。分割が行われるたびに、その時点で存在するすべての部分配列の合計を計算し、最大の合計値を出力します。 例で理解する 入力 − int arr[] = { 9, 4, 5, 6, 7 }、int splitPoints[] = { 0, 2, 3, 1 } 出力 − 各分割後の最大部分配列和:[22, 13, 9, 9] 説明 − 配列を分割点に従って分割し、各段階での最大部分配列和を求めます。 1回目の分割後 → {9} と {4,5
-
Javaでサイズ4のグループごとの要素の異なるXORを使って配列を求める方法
問題の概要サイズN(4の倍数)の整数型配列が与えられ、この配列に対して排他的論理和(XOR)演算を行います。入力配列 input[1〜4] が utility_arr[1〜4] に対応するように変換するのが目的です。計算の条件は次のとおりです。arr[1〜4] = {a1, a2, a3, a4} のとき、q[1〜4] = {a1 ⊕ a2 ⊕ a3, a1 ⊕ a2 ⊕ a4, a1 ⊕ a3 ⊕ a4, a2 ⊕ a3 ⊕ a4}つまり、各グループの4つの要素から3つずつを選んでXORを計算し、その結果を除外した要素の位置に格納していきます。入出力シナリオ例1入力: int[] input
-
Javaで学ぶメモ化(1次元・2次元・3次元)動的計画法の基礎と実装
メモ化(Memoization)は動的計画法に基づく技法の一つで、同じ入力に対して同じ計算を二度以上実行しないようにすることで、再帰アルゴリズムの性能を向上させるためのものです。具体的には、引数ごとの計算結果を配列などのキャッシュに記録しておき、同じ入力で再度呼び出された際には保存済みの結果を即座に返します。メモ化は、再帰メソッドをトップダウン方式で実装することで実現できます。ここでは、基本的なフィボナッチ数列の例を通じて、この仕組みを順を追って理解していきましょう。1次元(1-D)メモ化値が変化する非定数のパラメータが1つだけの再帰アルゴリズムにメモ化を適用する場合、これを1次元(1-D)メ
-
JavaとSeleniumでWebページをスクロールダウンする方法【JavascriptExecutor活用】
SeleniumでJavaを使ってWebページを下にスクロールさせる方法を解説します。実はSelenium自体にはスクロールを直接制御する機能が備わっていません。そのため、JavascriptExecutorの力を借りて、目的の要素までスクロール操作を実行することになります。スクロールの基本的な仕組みまず、スクロール先となる要素を特定(ロケート)します。次に、JavascriptExecutorを使用してJavaScriptのコマンドを実行します。SeleniumではexecuteScriptメソッドを使うことでJavaScriptコマンドを実行できます。具体的には、JavaScriptのsc
-
JavaとSelenium WebDriverでBasic認証ポップアップを処理する方法
認証ポップアップとはSelenium WebDriverを使用した自動テストでは、サイトにアクセスした際に「Basic認証」によるユーザー名・パスワード入力のポップアップが表示されることがあります。この認証ダイアログはOSネイティブのウィンドウであるため、通常のSeleniumコマンドでは直接操作できません。そこで最もシンプルな対策として、URLの中にユーザー名とパスワードを埋め込む方法があります。これにより、認証ポップアップをスキップしてページへ直接アクセスできます。URLへの認証情報の埋め込み方法認証情報を含めたURLは以下の形式で記述します。https://username:passwo
-
JavaでCucumberのフィーチャーファイルを作成する方法【Eclipse+Mavenの手順を解説】
Cucumberは、振る舞い駆動開発(BDD)を支援するテスト自動化フレームワークであり、テストシナリオを記述するための「フィーチャーファイル(Featureファイル)」が不可欠です。この記事では、EclipseとMavenを使用してJavaプロジェクトにフィーチャーファイルを作成する手順を、ステップごとにわかりやすく解説します。 事前準備:Mavenプロジェクトの作成 ステップ1:新規作成ウィザードを開く Eclipseのメニューバーから「File」をクリックし、「New」→「Other」を選択します。 ステップ2:Mavenプロジェクトを選択する ウィザードの一覧から「Maven」フォ
-
JavaでCucumberのステップ定義ファイルを作成する方法【Eclipse+Mavenの手順解説】
Cucumberのステップ定義ファイルとはCucumberでは、フィーチャーファイルに記述した各ステップに対して、実際の処理内容を実装する「ステップ定義ファイル」が必要です。この記事では、EclipseとMavenを使用して、Javaでステップ定義ファイルを作成する具体的な手順を解説します。ステップ1:新規プロジェクトの作成を開始するEclipseのメニューから「File」→「New」→「Other」の順にクリックします。ステップ2:Mavenプロジェクトを選択するウィザードの一覧から「Maven」フォルダ内の「Maven Project」を選択し、「Next」をクリックします。ステップ3:ウ
-
Rest Assuredとは?JavaによるREST APIテストの基本と特徴を解説
Rest AssuredとはRest Assuredは、Javaライブラリを活用してREST APIを検証するためのオープンソースのテストフレームワークです。ヘッドレスクライアントとして動作し、REST Webサービスに対してリクエストの送信や応答の検証を行うことができます。また、Rest Assuredをベースとした関連ライブラリも、サーバーから返されるHTTPレスポンスの妥当性確認(バリデーション)に対応しています。Rest Assuredで検証できる項目Rest Assuredを使用すると、レスポンスのステータスコード、ボディ、メッセージ、ヘッダーなど、HTTPレスポンスを構成するさまざ
-
XPathで (空白)を含むテキストを検索する方法|normalize-space関数の使い方
XPathで や空白を含むテキストを検索する方法Web自動テストでは、 (ノーブレークスペース)や余分な空白を含むテキストを持つ要素を、XPathロケーターで特定したいケースがあります。まずは、前後に空白が含まれているWeb要素のHTMLコードを確認してみましょう。下の画像の例では、strongタグで囲まれた「JAVA BASICS」というテキストに空白が含まれていることが、HTMLコードから読み取れます。要素のテキストや属性値に空白が含まれている場合、そのような要素に対するXPathを作成するにはnormalize-space関数を使用します。この関数は、文字列から前後(
-
Javaで整数を出力するプログラムの書き方|Scannerを使った入力方法も解説
この記事では、Javaで整数を出力する方法をわかりやすく解説します。整数の取り扱いには「int型」を使用します。int型は32ビットの符号付き2の補数で表現される整数型で、扱える値の範囲は最小値が-2,147,483,648(-2^31)、最大値が2,147,483,647(2^31-1)です。int型は、メモリ使用量に特別な懸念がない限り、整数値のデフォルトのデータ型として広く利用されています。宣言のみの場合の初期値は0です。入力と出力のイメージたとえば、ユーザーが「45」という整数を入力すると、プログラムは次のように出力します。Enter an integer: 45期待される出力:The
-
Javaで文字列を出力するプログラムの書き方|サンプルコード付きで解説
この記事では、Javaで文字列を出力する方法について詳しく解説します。文字列(String)とは、文字や英数字が組み合わさって構成されるデータのことです。最も簡単に文字列を作成するには、次のように記述します。String str = Welcome to the club!!!コード内に文字列リテラルが現れると、コンパイラはその値を持つStringオブジェクトを自動的に生成します。この例では「Welcome to the club!!!」という文字列オブジェクトが作成されます。Javaにおける文字列の扱い他のオブジェクトと同様に、newキーワードとコンストラクタを使ってStringオブジェクト
-
Javaで2つの数値を加算するプログラムの書き方【初心者向けサンプルコード付き】
この記事では、Javaで2つの数値を加算(足し算)する方法について詳しく解説します。数値の加算は、基本的な「+」演算子を使用することで簡単に実装できます。以下に具体的な例を示します。入力例input_1 : 10 input_2 : 15出力例Sum : 25アルゴリズム2つの数値を加算するプログラムは、以下の手順で実装します。Step1- 開始 Step 2- 3つの整数型変数 input_1、input_2、sum を宣言する Step 3- ユーザーに2つの整数値の入力を促す/整数値を定義する Step 4- 値を読み込む Step 5- 加算演算子(+)を使用して2つの値を足し合わせる
-
Javaで2つの数値を交換(スワップ)するプログラムの書き方
この記事では、Javaで2つの数値を交換(スワップ)する方法について解説します。数値の交換は、一時変数(テンポラリ変数)を使うことで簡単に実現できます。 まずは、入力と出力のイメージを確認しましょう。 入力 たとえば、次のような2つの値が与えられたとします。 value_1 : 45 value_2 : 70 出力 交換後の出力は次のようになります。 value_1 : 70 value_2 : 45 アルゴリズム 一時変数を使ったスワップ処理の手順は以下の通りです。 Step 1- 処理を開始する Step 2- 整数型変数 value_1、value_2、temp を宣言する Step
-
標準入力から数値を読み取るJavaプログラムの書き方
この記事では、Javaで標準入力から数値を読み取る方法について詳しく解説します。数値の読み取りにはScannerクラスのnextInt()メソッドを使用します。java.util.Scanner.nextInt()メソッドは、入力された次のトークンをint型(整数)として読み取るためのメソッドです。引数なしでnextInt()を呼び出した場合、nextInt(radix)を呼び出した場合とまったく同じように動作し、その際のradix(基数)にはスキャナのデフォルト基数が使用されます。動作イメージ以下に実際の入出力例を示します。入力ユーザーが次の値を入力したとします。55出力プログラムは次のよう
-
【Java入門】ユーザーからの入力を取得する方法|ScannerとBufferedReaderの使い方
はじめにこの記事では、Javaでユーザー(キーボード)からの入力を取得する方法を解説します。ユーザー入力の読み取りには、主にjava.util.Scannerクラスを使用します。Scannerクラスには、目的に応じてさまざまなメソッドが用意されています。たとえばnextInt()メソッドは、入力の次のトークンをint型(整数)として読み取ります。引数を指定せずにnextInt()を呼び出した場合、Scannerオブジェクトが持つデフォルトの基数(radix)を使ってnextInt(radix)を呼び出したときとまったく同じ動作になります。また、1行分の文字列を読み取りたい場合はnextLine
-
Javaで2つの浮動小数点数(float)を乗算するプログラムの書き方
この記事では、Javaを使って2つの浮動小数点数(float型)を乗算する方法を解説します。浮動小数点数とは、小数点以下の値を持つ数値のことです。floatデータ型はIEEE 754に準拠した単精度32ビットの浮動小数点数で、大量の浮動小数点数を扱う配列などでメモリ使用量を抑えたい場合に主に利用されます。デフォルト値は0.0fです。ただし、通貨のように厳密な精度が求められる値にはfloat型は適していませんので注意しましょう。 入力と出力の例 まず、どのような処理を行うのかを具体的な例で確認します。 入力: Value_1: 12.4f Value_2: 15.7f 出力: Result :
-
Javaで2つのバイナリ文字列(2進数)を加算するプログラムの書き方
この記事では、Javaを使って2つのバイナリ文字列(2進数)を加算する方法を解説します。バイナリ文字列とは、0と1だけで表現される数値の並びのことです。ここでは、繰り上がり(キャリー)を管理しながら各桁を順番に足し合わせていく、基本的なアルゴリズムを紹介します。入力と出力の例たとえば、次の2つのバイナリ数値を加算することを考えてみましょう。入力:10101 10001出力:10011010進数に直すと「21 + 17 = 38」となり、38を2進数で表現すると「100110」になります。つまり、計算結果が正しいことが確認できます。アルゴリズム処理の流れは以下のとおりです。ステップ1 - 処理を
-
【Java入門】2つの複素数を加算するプログラムの作り方を解説
この記事では、Javaを使って2つの複素数を加算する方法を解説します。複素数は「i」で表される虚部を持つ数値のため、実部と虚部をそれぞれ別々に計理する必要があります。 複素数の加算の基本 複素数は一般的に「a + bi」という形で表されます。ここで「a」が実部、「b」が虚部です。2つの複素数を足し合わせる場合は、以下のように実部同士・虚部同士をそれぞれ加算します。 (a + bi) + (c + di) = (a + c) + (b + d)i 入力と出力の例 入力: 15 + i24 と 3 + i7 出力: 18 + i31 アルゴリズム ステップ1:開始 ステップ2:3つの複素数(my_