From 8fcfe659a028c600cdeed65ec0b50005cdbb5f32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E7=A4=92=20=E8=80=80=E5=B9=B3?= Date: Mon, 29 Aug 2022 10:52:10 +0900 Subject: [PATCH 1/2] =?UTF-8?q?A023=20=E9=80=B1=E4=BC=912=E6=97=A5?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ykoiso/src/A023_Holiday.java | 61 +++++++++++++++++++++++++++++++ ykoiso/test/A023_HolidayTest.java | 39 ++++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 ykoiso/src/A023_Holiday.java create mode 100644 ykoiso/test/A023_HolidayTest.java diff --git a/ykoiso/src/A023_Holiday.java b/ykoiso/src/A023_Holiday.java new file mode 100644 index 0000000..76ac999 --- /dev/null +++ b/ykoiso/src/A023_Holiday.java @@ -0,0 +1,61 @@ +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class A023_Holiday { + public static final int TWO_HOLIDAY = 5; + + public static void main(String[] args) { + Scanner scan = new Scanner(System.in); + final int days = scan.nextInt(); + final List schedule = new ArrayList<>(); + for (int i = 0; i < days; i++) { + schedule.add(scan.nextInt()); + } + final int maxDaysOfTwoHoliDay = calcMaxTwoHoliday(days, schedule); + System.out.println(maxDaysOfTwoHoliDay); + scan.close(); + } + + // 週休2日の最大日数を計算 + public static int calcMaxTwoHoliday(final int days, final List schedule) { + // 週休2日の連続日数 + int daysOfTwoHoliDay = 0; + // 週休2日の最大連続日数 + int maxDaysOfTwoHoliDay = 0; + for (int i = 0; i < days; i++) { + // 7日あるなら計算 + if (i + 6 < days) { + // 条件満たすなら加算 + if (isTwoHoliday(i, schedule)) { + daysOfTwoHoliDay++; + } else { + // 満たさない場合リセット + daysOfTwoHoliDay = 0; + } + if (daysOfTwoHoliDay > maxDaysOfTwoHoliDay) { + // 最大値の更新 + maxDaysOfTwoHoliDay = daysOfTwoHoliDay; + } + } + } + // 0出ないなら6日分加算 + if (maxDaysOfTwoHoliDay != 0) { + maxDaysOfTwoHoliDay += 6; + } + return maxDaysOfTwoHoliDay; + } + + // 週休2日の条件を満たすか + public static boolean isTwoHoliday(final int date, final List scehdule) { + int workCount = 0; + for (int i = date; i < date + 7; i++) { + workCount += scehdule.get(i); + } + if (workCount <= TWO_HOLIDAY) { + return true; + } else { + return false; + } + } +} diff --git a/ykoiso/test/A023_HolidayTest.java b/ykoiso/test/A023_HolidayTest.java new file mode 100644 index 0000000..8f1b831 --- /dev/null +++ b/ykoiso/test/A023_HolidayTest.java @@ -0,0 +1,39 @@ +import static org.junit.Assert.assertThat; +import java.util.Arrays; +import java.util.List; +import org.junit.Test; +import static org.hamcrest.CoreMatchers.*; + +public class A023_HolidayTest { + @Test + public void 週休2日の条件を判断できる() { + final List schedule = Arrays.asList(0, 1, 1, 0, 1, 1, 1); + int actual = A023_Holiday.calcMaxTwoHoliday(7, schedule); + int expected = 7; + assertThat(actual, is(expected)); + } + + @Test + public void 条件を満たさない時0を返す() { + final List schedule = Arrays.asList(1, 1, 1, 0, 1, 1, 1); + int actual = A023_Holiday.calcMaxTwoHoliday(7, schedule); + int expected = 0; + assertThat(actual, is(expected)); + } + + @Test + public void 連続した週休2日制の日数を計算できる() { + final List schedule = Arrays.asList(1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1); + int actual = A023_Holiday.calcMaxTwoHoliday(14, schedule); + int expected = 13; + assertThat(actual, is(expected)); + } + @Test + public void 連続していない場合カウントされない() { + final List schedule = Arrays.asList(0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0); + int actual = A023_Holiday.calcMaxTwoHoliday(14, schedule); + int expected = 7; + assertThat(actual, is(expected)); + } +} + -- GitLab From 71947dbb6bfae859c63caa83263296c0487b4412 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E7=A4=92=20=E8=80=80=E5=B9=B3?= Date: Mon, 29 Aug 2022 14:56:55 +0900 Subject: [PATCH 2/2] =?UTF-8?q?A023=20=E9=80=B1=E4=BC=912=E6=97=A5?= =?UTF-8?q?=E5=88=B6=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ykoiso/src/A023_Holiday.java | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/ykoiso/src/A023_Holiday.java b/ykoiso/src/A023_Holiday.java index 76ac999..04035cb 100644 --- a/ykoiso/src/A023_Holiday.java +++ b/ykoiso/src/A023_Holiday.java @@ -23,23 +23,18 @@ public class A023_Holiday { int daysOfTwoHoliDay = 0; // 週休2日の最大連続日数 int maxDaysOfTwoHoliDay = 0; - for (int i = 0; i < days; i++) { - // 7日あるなら計算 - if (i + 6 < days) { - // 条件満たすなら加算 - if (isTwoHoliday(i, schedule)) { - daysOfTwoHoliDay++; - } else { - // 満たさない場合リセット - daysOfTwoHoliDay = 0; - } - if (daysOfTwoHoliDay > maxDaysOfTwoHoliDay) { - // 最大値の更新 - maxDaysOfTwoHoliDay = daysOfTwoHoliDay; - } + for (int i = 0; i < days - 6; i++) { + // 条件満たすなら加算 + if (isTwoHoliday(i, schedule)) { + daysOfTwoHoliDay++; + } else { + // 満たさない場合リセット + daysOfTwoHoliDay = 0; } + maxDaysOfTwoHoliDay=Math.max(maxDaysOfTwoHoliDay, daysOfTwoHoliDay); } - // 0出ないなら6日分加算 + + // 0でないなら6日分加算 if (maxDaysOfTwoHoliDay != 0) { maxDaysOfTwoHoliDay += 6; } -- GitLab