From 10d59350a16cac1c2b2092dec9291160c05f95a8 Mon Sep 17 00:00:00 2001 From: anakamura Date: Thu, 24 Jul 2025 13:35:43 +0900 Subject: [PATCH] =?UTF-8?q?paiza=E3=81=AE=E5=95=8F=E9=A1=8CB158=E3=81=AE?= =?UTF-8?q?=E5=9B=9E=E7=AD=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- anakamura/src/B158.java | 26 +++++++++++ anakamura/src/Board.java | 20 +++++++++ anakamura/src/CreatePyramid.java | 35 +++++++++++++++ anakamura/test/B158Test.java | 76 ++++++++++++++++++++++++++++++++ 4 files changed, 157 insertions(+) create mode 100644 anakamura/src/B158.java create mode 100644 anakamura/src/Board.java create mode 100644 anakamura/src/CreatePyramid.java create mode 100644 anakamura/test/B158Test.java diff --git a/anakamura/src/B158.java b/anakamura/src/B158.java new file mode 100644 index 0000000..56a91f8 --- /dev/null +++ b/anakamura/src/B158.java @@ -0,0 +1,26 @@ +package anakamura.src; + +import java.util.Scanner; + +public class B158 { + public static void main(String[] args) { + // 入力された値の取得 + final Scanner sc = new Scanner(System.in); + // 一辺の板の数を表す整数Nを取得 + final int squareN = sc.nextInt(); + // それぞれの板に積まれている石の数を取得 + final int[][] matrixOfBoards = new int[squareN][squareN]; + for (int i = 0; i < squareN; i++) { + for (int j = 0; j < squareN; j++) { + matrixOfBoards[i][j] = sc.nextInt(); + } + } + + sc.close(); + + final Board board = new Board(squareN, matrixOfBoards); + final CreatePyramid createpyramid = new CreatePyramid(); + final int result = createpyramid.create(board); + System.out.println(result); + } +} diff --git a/anakamura/src/Board.java b/anakamura/src/Board.java new file mode 100644 index 0000000..f116d4b --- /dev/null +++ b/anakamura/src/Board.java @@ -0,0 +1,20 @@ +package anakamura.src; + +public class Board { + // 板の値や行列の値を保持するクラス + final int squareN; + final int[][] matrixOfBoards; + + public Board(final int squareN, final int[][] matrixOfBoards) { + this.squareN = squareN; + this.matrixOfBoards = matrixOfBoards; + } + + public int getN() { + return squareN; + } + + public int[][] getMatrix() { + return matrixOfBoards; + } +} diff --git a/anakamura/src/CreatePyramid.java b/anakamura/src/CreatePyramid.java new file mode 100644 index 0000000..8aaaf10 --- /dev/null +++ b/anakamura/src/CreatePyramid.java @@ -0,0 +1,35 @@ +package anakamura.src; + +//値を受け取り、処理を行うクラス +public class CreatePyramid { + public int create(Board board) { + int totalStones = 0; + /* + * 行と列のそれぞれの場所から一番外側の値を調べ、 最小値を調べて比較する + */ + for (int x = 0; x < board.squareN; x++) { + for (int y = 0; y < board.squareN; y++) { + // 上からi番目、左からj番目の値が小さいほうを代入 + int edgeValue = Math.min(x, y); + // edgeと下端からの距離を比較し、値が小さいほうを代入 + edgeValue = Math.min(edgeValue, board.squareN - 1 - x); + // edgeと右端からの距離を比較し、値が小さいほうを代入 + edgeValue = Math.min(edgeValue, board.squareN - 1 - y); + // 一番外側を1とするため、それぞれ1つずつ数を上げる + int sum = edgeValue + 1; + + // 一枚あたりに動かす必要のある石の数を調べる + int numberOfStones = board.matrixOfBoards[x][y] - sum; + // 石の数を足していく + totalStones += numberOfStones; + } + + } + // 運び出す石の数の合計を出力 + //System.out.println(totalStones); + return totalStones; + } +} + + + diff --git a/anakamura/test/B158Test.java b/anakamura/test/B158Test.java new file mode 100644 index 0000000..f06c966 --- /dev/null +++ b/anakamura/test/B158Test.java @@ -0,0 +1,76 @@ +package anakamura.test; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.*; +//import static org.junit.Assert.*; +import org.junit.Test; +import anakamura.src.Board; +import anakamura.src.CreatePyramid; + +public class B158Test { + // 正常系_正しく動かす必要のある石の数が返されているかのテスト + @Test + public void createメソッドが正しく84を返す場合() { + int squareN = 5; + int[][] matrixOfBoards = { + { + 3, 3, 3, 2, 6 + }, { + 1, 9, 4, 5, 3 + }, { + 1, 8, 4, 6, 5 + }, { + 4, 9, 2, 6, 8 + }, { + 7, 5, 8, 1, 6 + } + }; + Board board = new Board(squareN, matrixOfBoards); + CreatePyramid createpyramid = new CreatePyramid(); + int actual = createpyramid.create(board); + assertThat(actual, is(84)); + } + + @Test + // 値が0(石を動かす必要がない)と正しく返すかテスト + public void createメソッドが正しく0を返す場合() { + int squareN = 5; + int[][] matrixOfBoards = { + { + 1, 1, 1, 1, 1 + }, { + 1, 2, 2, 2, 1 + }, { + 1, 2, 3, 2, 1 + }, { + 1, 2, 2, 2, 1 + }, + { + 1, 1, 1, 1, 1 + } + }; + Board board = new Board(squareN, matrixOfBoards); + CreatePyramid createpyramid = new CreatePyramid(); + int actual = createpyramid.create(board); + assertThat(actual, is(0)); + } + +} + + +// squareNに負の数が与えられたときのテスト +final class BoardTest { + @Test(expected = IllegalArgumentException.class) + public void testCreateMethodThrowsExceptionForNegativeSquareN() { + int squareN = -1; // squareNが負の値 + int[][] matrixOfBoards = { + { + 1, 2 + }, { + 3, 4 + } + }; + Board board = new Board(squareN, matrixOfBoards); + CreatePyramid createpyramid = new CreatePyramid(); + createpyramid.create(board); // 不正なデータに対して例外が発生することを期待 + } +} -- GitLab