diff --git a/rtanaka/src/B158.java b/rtanaka/src/B158.java new file mode 100644 index 0000000000000000000000000000000000000000..f86368f1867e51a3364f718de1007e4318542b47 --- /dev/null +++ b/rtanaka/src/B158.java @@ -0,0 +1,36 @@ +import java.util.Scanner; + +/** + * 正方形の盤に積まれた石をピラミッド型に整理するjavaファイル + * @author 田中亮汰 + * @version 1.0 + */ + +public class B158 { + + public static void main(final String[] args) { + /* 入力 */ + PyramidStore store = new PyramidStore(); + Scanner scan = new Scanner(System.in); + store.setBoardLength(scan.nextInt());// 盤の一辺の長さ + int boardLength = store.getBoardLength(); + + // 盤に対する石の個数を受け取る + int[][] boardStone = new int[boardLength][boardLength]; + for (int i = 0; i < boardLength; i++) { + for (int j = 0; j < boardLength; j++) { + boardStone[i][j] = scan.nextInt(); + } + } + store.setBoardStone(boardStone); + scan.close(); + + /* 計算 */ + PyramidCalculation calculation = new PyramidCalculation(store); + calculation.calculateIdealBoard();// 理想の盤面を計算するメソッド + calculation.compareAndRemoveStones();// 盤面を比較し、除去すべき石の数を計算するメソッド + /*出力*/ + System.out.println(store.getBoardStoneSum()); + } + +} \ No newline at end of file diff --git a/rtanaka/src/PyramidCalculation.java b/rtanaka/src/PyramidCalculation.java new file mode 100644 index 0000000000000000000000000000000000000000..d67b5cff00e424c06b4543df03792c7a6b3bf831 --- /dev/null +++ b/rtanaka/src/PyramidCalculation.java @@ -0,0 +1,49 @@ +/** + * PyramidInputから値を受けとり計算しメインに値を渡すクラスファイル + * + * @author 田中亮汰 + * @version 1.0 + */ +public class PyramidCalculation { + PyramidStore pyramidStore; + private int[][] boardStoneIdeal; + private int[][] boardStoneCompare; + private int boardStoneSum = 0; + final int BOARD_LENGTH; + + // 保存クラスのインスタンスを受け取る + public PyramidCalculation(PyramidStore store) { + this.pyramidStore = store; + this.BOARD_LENGTH = this.pyramidStore.getBoardLength(); + } + + // 理想の盤面を計算するメソッド + public void calculateIdealBoard() { + boardStoneIdeal = new int[BOARD_LENGTH][BOARD_LENGTH]; + for (int i = 0; i < BOARD_LENGTH; i++) { + for (int j = 0; j < BOARD_LENGTH; j++) { + int pyramidEdge = Math.min(Math.min(i, j), Math.min(BOARD_LENGTH - 1 - i, BOARD_LENGTH - 1 - j)); + boardStoneIdeal[i][j] = pyramidEdge + 1;// 最小値0の所から石を1つ置くので+1 + } + } + } + + // 盤面を比較し、除去すべき石の数を計算するメソッド + public void compareAndRemoveStones() { + boardStoneCompare = new int[BOARD_LENGTH][BOARD_LENGTH]; + for (int i = 0; i < BOARD_LENGTH; i++) { + for (int j = 0; j < BOARD_LENGTH; j++) { + boardStoneCompare[i][j] = pyramidStore.getBoardStone(i, j) - boardStoneIdeal[i][j]; + } + } + + // 除去する石の個数を集計 + for (int[] stoneCounts : boardStoneCompare) { + for (int stoneCount : stoneCounts) { + boardStoneSum += stoneCount; + } + } + pyramidStore.setBoardStoneSum(boardStoneSum); + } + +} \ No newline at end of file diff --git a/rtanaka/src/PyramidStore.java b/rtanaka/src/PyramidStore.java new file mode 100644 index 0000000000000000000000000000000000000000..3b38006ba0edd03caa8e70a2da6e83c1b834089d --- /dev/null +++ b/rtanaka/src/PyramidStore.java @@ -0,0 +1,33 @@ + +public class PyramidStore { + private int boardLength; + private int[][] boardStone; + private int boardStoneSum; + + public int[][] getBoardStone() { + return boardStone; + } + public int getBoardStone(int i, int j ) { + return boardStone[i][j]; + } + + public int getBoardLength() { + return boardLength; + } + + public int getBoardStoneSum() { + return boardStoneSum; + } + + public void setBoardStone(int[][]boardStone) { + this.boardStone = boardStone; + } + + public void setBoardLength(int boardLength) { + this.boardLength = boardLength; + } + + public void setBoardStoneSum(int boardStoneSum) { + this.boardStoneSum = boardStoneSum; + } +}