3
1

瓜売りが瓜売りに来て瓜売れ残り売り売り帰る瓜売りの声

うりうりウルセェ!

チェック処理とかは端折ってる

/** ここから定型文 */
ここで記載したクラスについては、
こっちの記事に書いてある、標準入力をList化したりしてるMainクラスから呼び出す予定だし・なんか継承したりしてるYO!!

ちな、Mainを実行して標準入力から入力するのクソ面倒くさいので、
Java編については問題の入力例をパラメータにしたテストクラスとかも作って公開するYO!!

開発・実行環境はこんな感じ
  • VSCode
  • Java 17
  • jUnit 5.9
  • maven

pom.xmlはこんな感じ

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>jp.co.asil</groupId>
    <artifactId>paiza202408</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.9.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
/** ここまで定型文 */

実装クラス

Leftover.java
package jp.co.asil.paiza202408;

import java.text.DecimalFormat;
import java.util.List;

public class Leftover extends Question {

  public Leftover(List<String> list) {
    super(list);
  }

  /**
   * あなたはスーパーマーケットを経営しています。
   * 
   * 今、ある生鮮食品を m[kg] 仕入れました。とても新鮮だったため、生のまま販売したところ、 m[kg] のうち p[%]
   * を売ることができました。次にその売れ残りをすべてお惣菜にして販売したところ、売れ残った量のうち q[%] が売れました
   * 
   * さて、m[kg] 仕入れたこの食品は最終的に何kg 売れ残ったでしょうか。ただし、生鮮食品をお総菜にする際は、量を変えることなく調理できるものとします。
   */
  @Override
  public List<String> answer() {
    double[] conds = List.of(list.get(0).split(" ")).stream().mapToDouble(Double::parseDouble).toArray();
    return List.of(conds[1] == 100D || conds[2] == 100D ? "0"
        : new DecimalFormat("#.##########").format(conds[0] * (100D - conds[1]) * (100D - conds[2]) / 10000D));
  }
}

テストクラス

LeftoverTest.java
package jp.co.asil.paiza202408;

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.util.List;

import org.junit.jupiter.api.Test;

public class LeftoverTest {
  @Test
  void testAnswer1() {
    Leftover testClass = new Leftover(List.of("1 80 40"));
    assertEquals(testClass.answer().get(0), "0.12");
  }

  @Test
  void testAnswer2() {
    Leftover testClass = new Leftover(List.of("10 31 52"));
    assertEquals(testClass.answer().get(0), "3.312");
  }

  @Test
  void testAnswer3() {
    Leftover testClass = new Leftover(List.of("1 99 99"));
    assertEquals(testClass.answer().get(0), "0.0001");
  }
}

ざっくり

少数を扱うからDoubleを使うよ、最後にフォーマット掛けてるよぐらい。
本来ならBigDecimalとか使って計算しろよって感じだけど、即席で作ったのでこんなもん。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1