From 356754a8d55032b1436b38f93904c41f9bf3194b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=8E=E7=94=B0=20=E5=95=93=E4=BB=8B?= Date: Tue, 9 Aug 2022 09:26:02 +0900 Subject: [PATCH 1/2] =?UTF-8?q?B073=20=E3=82=A4=E3=83=AB=E3=83=9F=E3=83=8D?= =?UTF-8?q?=E3=83=BC=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=AE=E8=AA=BF=E6=9F=BB?= =?UTF-8?q?ver1.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- knoda/src/B073_Illumination.java | 68 +++++++++++++++++++++++++++ knoda/test/B073_IlluminationTest.java | 62 ++++++++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 knoda/src/B073_Illumination.java create mode 100644 knoda/test/B073_IlluminationTest.java diff --git a/knoda/src/B073_Illumination.java b/knoda/src/B073_Illumination.java new file mode 100644 index 0000000..c7f56af --- /dev/null +++ b/knoda/src/B073_Illumination.java @@ -0,0 +1,68 @@ +package hellojunit; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class B073_Illumination { + + public static void main(String[] args) { + final Scanner scan = new Scanner(System.in); + final int treeNum = scan.nextInt(); + final int baseElectricNum = scan.nextInt(); // 安全基準を満たす電球の個数 + List electricList = new ArrayList(); // それぞれの木に存在する電球の個数 + for (int i = 0; i < treeNum; i++) { + electricList.add(scan.nextInt()); + } + final int selectionNum = scan.nextInt(); // 電球の数を調査したい区間の数 + + // 電球を調査したい区間の始点と終点を格納したリスト + final List> selectionList = new ArrayList>(); + + for (int i = 0; i < selectionNum; i++) { + final List selection = new ArrayList(); + selection.add(scan.nextInt()); // 始点 + selection.add(scan.nextInt()); // 終点 + selectionList.add(selection); + } + final IlluminationSearch illuminationSearch = new IlluminationSearch(); + // それぞれの木に存在する電球の個数を取得する + electricList = illuminationSearch.getElectricList(electricList, selectionList, baseElectricNum); + for (int i = 0; i < electricList.size(); i++) { + System.out.print(electricList.get(i)); + if (i != electricList.size() - 1) { + System.out.print(" "); + } + } + scan.close(); + } + +} + +class IlluminationSearch { + private final int START_INDEX = 0; // 始点の要素番号 + private final int FINISH_INDEX = 1; // 終点の要素番号 + + // それぞれの木に存在する電球の個数を取得するメソッド + public List getElectricList(final List electricList, final List> selectionList, + final int baseElectricNum) { + + // それぞれの区間で、追加する電球の個数を算出する + for (final List selection : selectionList) { + int sum = 0; + final int average; + // ある区間の電球の平均個数を算出する + for (int i = selection.get(START_INDEX) - 1; i <= selection.get(FINISH_INDEX) - 1; i++) { + sum += electricList.get(i); + } + average = sum / (selection.get(FINISH_INDEX) - selection.get(START_INDEX) + 1); + // 平均個数が安全基準を満たす電球個数に達していないとき、区間に存在するすべての木に足りない電球分を追加する + if (average < baseElectricNum) { + for (int i = selection.get(START_INDEX) - 1; i <= selection.get(FINISH_INDEX) - 1; i++) { + electricList.set(i, electricList.get(i) + (baseElectricNum - average)); + } + } + } + return electricList; + } +} diff --git a/knoda/test/B073_IlluminationTest.java b/knoda/test/B073_IlluminationTest.java new file mode 100644 index 0000000..b94703e --- /dev/null +++ b/knoda/test/B073_IlluminationTest.java @@ -0,0 +1,62 @@ +package hellojunit; + +import static org.hamcrest.CoreMatchers.*; +import static org.junit.Assert.*; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.junit.Test; + +public class B073_IlluminationTest { + + @Test + public void 電球が追加されるテスト() { + List electricList = new ArrayList(Arrays.asList(4, 3, 6, 1, 3)); + final List> selectionList = new ArrayList>(Arrays.asList( + new ArrayList(Arrays.asList(1, 3)), + new ArrayList(Arrays.asList(1, 5)), + new ArrayList(Arrays.asList(2, 3)))); + final int baseElectricNum = 6; + IlluminationSearch illuminationSearch = new IlluminationSearch(); + final List actualList = illuminationSearch.getElectricList(electricList, selectionList, baseElectricNum); + final List expectedList = new ArrayList(Arrays.asList(8, 7, 10, 3, 5)); + for (int i = 0; i < actualList.size(); i++) { + assertThat(actualList.get(i), is(expectedList.get(i))); + } + } + + @Test + public void 電球が追加されないテスト() { + List electricList = new ArrayList(Arrays.asList(4, 3, 6, 1, 3)); + final List> selectionList = new ArrayList>(Arrays.asList( + new ArrayList(Arrays.asList(1, 3)), + new ArrayList(Arrays.asList(1, 5)), + new ArrayList(Arrays.asList(2, 3)))); + final int baseElectricNum = 3; + IlluminationSearch illuminationSearch = new IlluminationSearch(); + final List actualList = illuminationSearch.getElectricList(electricList, selectionList, baseElectricNum); + final List expectedList = new ArrayList(Arrays.asList(4, 3, 6, 1, 3)); + for (int i = 0; i < actualList.size(); i++) { + assertThat(actualList.get(i), is(expectedList.get(i))); + } + } + + @Test + public void 電球の基準値と平均値の比較に関する境界値テスト() { + List electricList = new ArrayList(Arrays.asList(4, 3, 6, 1, 3)); + final List> selectionList = new ArrayList>(Arrays.asList( + new ArrayList(Arrays.asList(1, 3)), // average:4, baseElectricNum:4 + new ArrayList(Arrays.asList(1, 5)), // average:3, baseElectricNum:4 + new ArrayList(Arrays.asList(2, 3)))); // average:5, baseElectricNum:4 + final int baseElectricNum = 4; + IlluminationSearch illuminationSearch = new IlluminationSearch(); + final List actualList = illuminationSearch.getElectricList(electricList, selectionList, baseElectricNum); + final List expectedList = new ArrayList(Arrays.asList(5, 4, 7, 2, 4)); + for (int i = 0; i < actualList.size(); i++) { + assertThat(actualList.get(i), is(expectedList.get(i))); + } + } + +} -- GitLab From 8507d2ff3da6b17e84d33975d60bb6e48ab79477 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=8E=E7=94=B0=20=E5=95=93=E4=BB=8B?= Date: Tue, 9 Aug 2022 17:09:55 +0900 Subject: [PATCH 2/2] =?UTF-8?q?B073=20=E3=82=A4=E3=83=AB=E3=83=9F=E3=83=8D?= =?UTF-8?q?=E3=83=BC=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=AE=E8=AA=BF=E6=9F=BB?= =?UTF-8?q?ver1.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- knoda/src/B073_Illumination.java | 50 ++++++++++++++++---------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/knoda/src/B073_Illumination.java b/knoda/src/B073_Illumination.java index c7f56af..f1017fb 100644 --- a/knoda/src/B073_Illumination.java +++ b/knoda/src/B073_Illumination.java @@ -9,28 +9,28 @@ public class B073_Illumination { public static void main(String[] args) { final Scanner scan = new Scanner(System.in); final int treeNum = scan.nextInt(); - final int baseElectricNum = scan.nextInt(); // 安全基準を満たす電球の個数 - List electricList = new ArrayList(); // それぞれの木に存在する電球の個数 + final int baseLightBulbNum = scan.nextInt(); // 安全基準を満たす電球の個数 + List lightBulbList = new ArrayList(); // それぞれの木に存在する電球の個数 for (int i = 0; i < treeNum; i++) { - electricList.add(scan.nextInt()); + lightBulbList.add(scan.nextInt()); } - final int selectionNum = scan.nextInt(); // 電球の数を調査したい区間の数 + final int sectionNum = scan.nextInt(); // 電球の数を調査したい区間の数 // 電球を調査したい区間の始点と終点を格納したリスト - final List> selectionList = new ArrayList>(); + final List> sectionList = new ArrayList>(); - for (int i = 0; i < selectionNum; i++) { - final List selection = new ArrayList(); - selection.add(scan.nextInt()); // 始点 - selection.add(scan.nextInt()); // 終点 - selectionList.add(selection); + for (int i = 0; i < sectionNum; i++) { + final List section = new ArrayList(); + section.add(scan.nextInt()); // 始点 + section.add(scan.nextInt()); // 終点 + sectionList.add(section); } final IlluminationSearch illuminationSearch = new IlluminationSearch(); // それぞれの木に存在する電球の個数を取得する - electricList = illuminationSearch.getElectricList(electricList, selectionList, baseElectricNum); - for (int i = 0; i < electricList.size(); i++) { - System.out.print(electricList.get(i)); - if (i != electricList.size() - 1) { + lightBulbList = illuminationSearch.getLightBulbList(lightBulbList, sectionList, baseLightBulbNum); + for (int i = 0; i < lightBulbList.size(); i++) { + System.out.print(lightBulbList.get(i)); + if (i != lightBulbList.size() - 1) { System.out.print(" "); } } @@ -44,25 +44,25 @@ class IlluminationSearch { private final int FINISH_INDEX = 1; // 終点の要素番号 // それぞれの木に存在する電球の個数を取得するメソッド - public List getElectricList(final List electricList, final List> selectionList, - final int baseElectricNum) { + public List getLightBulbList(final List lightBulbList, final List> sectionList, + final int baseLightBulbNum) { // それぞれの区間で、追加する電球の個数を算出する - for (final List selection : selectionList) { + for (final List section : sectionList) { int sum = 0; - final int average; + int average; // ある区間の電球の平均個数を算出する - for (int i = selection.get(START_INDEX) - 1; i <= selection.get(FINISH_INDEX) - 1; i++) { - sum += electricList.get(i); + for (int i = section.get(START_INDEX) - 1; i <= section.get(FINISH_INDEX) - 1; i++) { + sum += lightBulbList.get(i); } - average = sum / (selection.get(FINISH_INDEX) - selection.get(START_INDEX) + 1); + average = sum / (section.get(FINISH_INDEX) - section.get(START_INDEX) + 1); // 平均個数が安全基準を満たす電球個数に達していないとき、区間に存在するすべての木に足りない電球分を追加する - if (average < baseElectricNum) { - for (int i = selection.get(START_INDEX) - 1; i <= selection.get(FINISH_INDEX) - 1; i++) { - electricList.set(i, electricList.get(i) + (baseElectricNum - average)); + if (average < baseLightBulbNum) { + for (int i = section.get(START_INDEX) - 1; i <= section.get(FINISH_INDEX) - 1; i++) { + lightBulbList.set(i, lightBulbList.get(i) + (baseLightBulbNum - average)); } } } - return electricList; + return lightBulbList; } } -- GitLab