diff --git a/ksugawara/src/JankenTrain.java b/ksugawara/src/JankenTrain.java new file mode 100644 index 0000000000000000000000000000000000000000..01f5d7b10c13692aecc96a9755c1cbe90084f25d --- /dev/null +++ b/ksugawara/src/JankenTrain.java @@ -0,0 +1,60 @@ +package ksugawara; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +class JankenTrain { + + private static int peopleNumber; // 参加する人数 + private static int matchNumber; // 試合数 + private static int[][] matchResults; // 試合結果を格納する二次元配列([x][0]が勝者の番号、[x][1]が敗者の番号) + private static final int FIGHT_NUM = 2; // 勝負する人数を表す定数 + + public void storeInputValues() { + final Scanner sc = new Scanner(System.in); + JankenTrain.peopleNumber = sc.nextInt(); + JankenTrain.matchNumber = sc.nextInt(); + JankenTrain.matchResults = new int[matchNumber][FIGHT_NUM]; + + // 試合結果を整数型で二次元配列に格納する + for (int row = 0; row < matchNumber; row++) { + for (int col = 0; col < FIGHT_NUM; col++) { + matchResults[row][col] = sc.nextInt(); + } + } + sc.close(); + } + + /** + * 優勝者の番号を探す関数. + */ + public static List findWinningNumbers() { + int maxScore = 0; // 一番勝っている人のスコアを保持する変数 + + // 参加する人の得点が入る配列を用意して、初期スコアである1を格納する + final List jankenTrainWinner = new ArrayList<>(); + final int[] jankenTrainScore = new int[peopleNumber]; + for (int i = 0; i < peopleNumber; i++) { + jankenTrainScore[i] = 1; + } + + // 勝ったら相手のスコアを自分のものとして、負けたら自身スコアを0にする + for (int i = 0; i < matchNumber; i++) { + jankenTrainScore[matchResults[i][0] - 1] = jankenTrainScore[matchResults[i][0] - 1] + + jankenTrainScore[matchResults[i][1] - 1]; + jankenTrainScore[matchResults[i][1] - 1] = 0; + if (maxScore < jankenTrainScore[matchResults[i][0] - 1]) { + maxScore = jankenTrainScore[matchResults[i][0] - 1]; + } + } + // すべての試合が終了して、最大スコアと同じスコアを持っている番号をリストに格納する + for (int i = 0; i < peopleNumber; i++) { + if (jankenTrainScore[i] == maxScore) { + jankenTrainWinner.add(i + 1); + } + + } + return jankenTrainWinner; + } +} diff --git a/ksugawara/src/JankenTrainB143.java b/ksugawara/src/JankenTrainB143.java new file mode 100644 index 0000000000000000000000000000000000000000..26ba6e63426eaf548561efccbc5df02c45b2fb46 --- /dev/null +++ b/ksugawara/src/JankenTrainB143.java @@ -0,0 +1,22 @@ +package ksugawara; + +import java.util.List; + +/** + * ksugawara 「B43:じゃんけん列車」の回答プログラムのクラス. + */ +public class JankenTrainB143 { + /** + * 与えられた条件を基に、じゃんけん列車優勝者の出席番号の一覧を表示するプログラム. + */ + public static void main(final String[] args) { + final JankenTrain jankenTrain = new JankenTrain(); + jankenTrain.storeInputValues(); + final List jankenTrainWinner = JankenTrain.findWinningNumbers(); + System.out.println(jankenTrainWinner); + for (Integer winnerNumber : jankenTrainWinner) { + System.out.println(winnerNumber); + } + } + +} diff --git a/ksugawara/test/JankenTrainB143Test.java b/ksugawara/test/JankenTrainB143Test.java new file mode 100644 index 0000000000000000000000000000000000000000..cb2782a58d29c88b8239052892d8c831ac527f6b --- /dev/null +++ b/ksugawara/test/JankenTrainB143Test.java @@ -0,0 +1,69 @@ +package ksugawara; + +import static org.junit.Assert.assertEquals; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.util.List; +import org.junit.Before; +import org.junit.Test; + +/** + * B143のテストケース. + */ +public class JankenTrainB143Test { + private JankenTrain jankenTrain; + + @Before // 各テストの実行前に呼ばれる + public void setUp() { + jankenTrain = new JankenTrain(); + } + + @Test + public void test53() { + final String input = "5 3\n1 2\n3 4\n5 3"; // 入力文字列の作成 + final InputStream inputStream = new ByteArrayInputStream(input.getBytes()); // 入力ストリームを作成 + System.setIn(inputStream); // 標準入力として設定 + + jankenTrain.storeInputValues(); // 標準入力された値を基に変数や配列に値を格納する + final List actual = JankenTrain.findWinningNumbers(); // 優勝した番号を調べる関数を動かし実際の挙動の値を格納する + final List expected = List.of(5); // 正しく実行された場合の値を格納する + assertEquals(expected, actual); // 実際の値と予測した値が同じ場合、テスト合格 + } + + @Test + public void test63() { + final String input = "6 3\n1 2\n3 4\n5 6"; + final InputStream inputStream = new ByteArrayInputStream(input.getBytes()); + System.setIn(inputStream); + + jankenTrain.storeInputValues(); + final List actual = JankenTrain.findWinningNumbers(); + final List expected = List.of(1, 3, 5); + assertEquals(expected, actual); + } + + @Test + public void test86() { + final String input = "8 6 \n1 2\n3 4\n5 6\n7 8\n1 3\n5 7"; + final InputStream inputStream = new ByteArrayInputStream(input.getBytes()); + System.setIn(inputStream); + + jankenTrain.storeInputValues(); + final List actual = JankenTrain.findWinningNumbers(); + final List expected = List.of(1, 5); + assertEquals(expected, actual); + } + + @Test + public void test98() { + final String input = "9 8 \n1 2\n3 1\n4 3\n5 4\n5 6\n7 5\n7 8\n7 9"; + final InputStream inputStream = new ByteArrayInputStream(input.getBytes()); + System.setIn(inputStream); + + jankenTrain.storeInputValues(); + final List actual = JankenTrain.findWinningNumbers(); + final List expected = List.of(7); + assertEquals(expected, actual); + } +}