From 0a5486c502a1c931f71da32b85ff209182fc974f 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: Wed, 10 Aug 2022 10:47:27 +0900 Subject: [PATCH] =?UTF-8?q?B087=20=E9=9A=A0=E3=81=95=E3=82=8C=E3=81=9F?= =?UTF-8?q?=E6=95=B0ver1.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- knoda/src/B087_HiddenNumber.java | 85 +++++++++++++++++++++++++++ knoda/test/B087_HiddenNumberTest.java | 61 +++++++++++++++++++ 2 files changed, 146 insertions(+) create mode 100644 knoda/src/B087_HiddenNumber.java create mode 100644 knoda/test/B087_HiddenNumberTest.java diff --git a/knoda/src/B087_HiddenNumber.java b/knoda/src/B087_HiddenNumber.java new file mode 100644 index 0000000..31180c9 --- /dev/null +++ b/knoda/src/B087_HiddenNumber.java @@ -0,0 +1,85 @@ +package hellojunit; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class B087_HiddenNumber { + + public static void main(String[] args) { + final Scanner scan = new Scanner(System.in); + final int height = scan.nextInt(); + final int width = scan.nextInt(); + final int digits = scan.nextInt(); + // マスに数字を入力する + final List board = new ArrayList(); + for (int i = 0; i < height; i++) { + board.add(scan.next()); + } + HiddenNumber hiddenNumber = new HiddenNumber(); + // 最大の数を取得する + final int max = hiddenNumber.getMaxNumber(board, digits); + System.out.println(max); + scan.close(); + } + +} + +class HiddenNumber { + private final int MIN_NUMBER = 1; // 値を比較するときに用いる初期値 + + // 最大の数を取得するメソッド + public int getMaxNumber(final List board, final int digits) { + int max = MIN_NUMBER; + max = getMaxNumber(board, digits, max); + // switchRowAndColumnBoard : マスの縦と横を入れ替えたときの状態 + final List switchRowAndColumnBoard = getSwitchRowAndColumn(board); + max = getMaxNumber(switchRowAndColumnBoard, digits, max); + return max; + } + + // それぞれの基盤(マスの縦と横を入れ替えた2つの基盤)の最大の数を取得するメソッド + private int getMaxNumber(final List board, final int digits, int max) { + for (final String row : board) { + for (int i = 0; i < row.length() - digits + 1; i++) { + final int number = exchangeStringForInteger(row, i, digits); + if (max < number) { + max = number; + } + } + } + return max; + } + + // マスの縦と横を入れ替えるメソッド + private List getSwitchRowAndColumn(final List board) { + final List switchRowAndColumn = new ArrayList(); + for (int i = 0; i < board.get(0).length(); i++) { + final List charList = new ArrayList(); + for (int j = 0; j < board.size(); j++) { + charList.add(board.get(j).charAt(i)); + } + switchRowAndColumn.add(exchangeCharForString(charList)); + } + return switchRowAndColumn; + } + + // 文字列を整数値に変換するメソッド + private int exchangeStringForInteger(final String row, final int startIndex, final int digits) { + final List charList = new ArrayList(); + for (int i = startIndex; i < startIndex + digits; i++) { + charList.add(row.charAt(i)); + } + return Integer.parseInt(exchangeCharForString(charList)); + } + + // 文字を文字列に変換するメソッド + private String exchangeCharForString(final List charList) { + StringBuilder sb = new StringBuilder(); + for (Character ch : charList) { + sb.append(ch); + } + return sb.toString(); + } + +} diff --git a/knoda/test/B087_HiddenNumberTest.java b/knoda/test/B087_HiddenNumberTest.java new file mode 100644 index 0000000..359d377 --- /dev/null +++ b/knoda/test/B087_HiddenNumberTest.java @@ -0,0 +1,61 @@ +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 B087_HiddenNumberTest { + + @Test + public void テスト1() { + final List board = new ArrayList(Arrays.asList( + "66737", + "56173", + "59414", + "25469", + "63955" + )); + final int digits = 3; + HiddenNumber hiddenNumber = new HiddenNumber(); + final int expected = 955; + final int actual = hiddenNumber.getMaxNumber(board, digits); + assertThat(actual, is(expected)); + } + + @Test + public void 出力が87になるテスト() { + final List board = new ArrayList(Arrays.asList( + "77777", + "77777", + "77777", + "77778", + "77787" + )); + final int digits = 2; + HiddenNumber hiddenNumber = new HiddenNumber(); + final int expected = 87; + final int actual = hiddenNumber.getMaxNumber(board, digits); + assertThat(actual, is(expected)); + } + + @Test + public void 出力が9876になるテスト() { + final List board = new ArrayList(Arrays.asList( + "12345", + "54321", + "67891", + "19876" + )); + final int digits = 4; + HiddenNumber hiddenNumber = new HiddenNumber(); + final int expected = 9876; + final int actual = hiddenNumber.getMaxNumber(board, digits); + assertThat(actual, is(expected)); + } + +} -- GitLab