diff --git a/dseki/paiza/src/C056.java b/dseki/paiza/src/C056.java new file mode 100644 index 0000000000000000000000000000000000000000..6e13802e18d487f138acf1550899406c75ead8dd --- /dev/null +++ b/dseki/paiza/src/C056.java @@ -0,0 +1,65 @@ +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Scanner; + +/** + * テストの採点. + */ +public class C056 { + private final int students; // 生徒の数 + private final int passingGrade; // 合格点 + private final int POINT_DEDUCTION_FOR_ABSENCE = 5; // 1回の欠席につき減点する点数 + + private C056(final int students, final int passingGrade) { + this.students = students; + this.passingGrade = passingGrade; + } + + /** + * メインメソッド. + */ + public static void main(final String[] args) { + final Scanner sc = new Scanner(System.in); + new C056(sc.nextInt(), sc.nextInt()).outputStudentNoPassingScore(sc); + sc.close(); + } + + // 合格点以上の成績の学籍番号を返すメソッド + private void outputStudentNoPassingScore(final Scanner sc) { + for (final int outputStudentNo : studentNumberPassingScore(sc)) { + System.out.println(outputStudentNo); + } + } + + // 合格点以上の成績の学生番号リストを作るメソッド + private ArrayList studentNumberPassingScore(final Scanner sc) { + final ArrayList successfulCandidateList = new ArrayList(); // 合格者を格納するリスト + final Map mapOfStudentGrades = mapOfStudentGrades(sc); // メソッドを呼び出して格納 + // 生徒の数だけ繰り返す + for (int i = 1; i <= this.students; i++) { + if (mapOfStudentGrades.get(i) >= passingGrade) { + successfulCandidateList.add(i); + } + } + return successfulCandidateList; + } + + // 生徒の学籍番号と成績をマップに格納するメソッド + private Map mapOfStudentGrades(final Scanner sc) { + final Map studentGradesMap = new HashMap<>(); + for (int i = 1; i <= this.students; i++) { + studentGradesMap.put(i, calculateGrade(sc)); + } + return studentGradesMap; + } + + // 生徒の成績を計算するメソッド + private int calculateGrade(final Scanner sc) { + int grade = sc.nextInt() - (sc.nextInt() * POINT_DEDUCTION_FOR_ABSENCE); + if (grade < 0) { + grade = 0; + } + return grade; + } +} \ No newline at end of file