Scroll indicator done
728x90

https://codeup.kr/problem.php?id=3108 

 

정올 참여 학생 리스트 만들기 1

10 I 1011 한라산 I 999 백두산 I 999 오대산 D 999 백두산 I 800 백두산 D 500 한라산 I 900 남산 I 950 금강산 I 1205 지리산 I 700 북한산 1 2 4 5 6

codeup.kr


Student 클래스

class Student {
    private String code;
    private int testId;
    private String name;

    public Student(String code, int testId, String name) {
        this.code = code;
        this.testId = testId;
        this.name = name;
    }

    public String getCode() {
        return code;
    }

    public int getTestId() {
        return testId;
    }

    public String getName() {
        return name;
    }
}

 

makeAStudent → code, testId, name 을 입력받아 Student Object로 만들어주는 기능

public Student makeAStudent(String code, int testId, String name) {
    return new Student(code, testId, name);
}

 

isExist → students 에 입력받은 학생의 code가 중복되는지의 여부를 확인
addAStudent 에서만 사용하여 public → private 으로 선언

private boolean isExist(Student pStudent) {
    // 중복 여부 check
    for (Student student : students){
        if(pStudent.getTestId() == student.getTestId()){
            return true;
        }
    }
    return false;
}

 

addAStudent → isExist 메소드를 호출하여 코드가 중복되지 않으면 students 에 학생 추가

public void addASudent(Student student) {
    if (!isDuplicated(student)) {
        students.add(student);
    }
}

 

deleteStudent → getTestId 를 비교하여 리스트에서 학생을 찾아 제거

private void deleteStudent(Student pStudent) {
    // pStudent가 students에 몇번째에 있는지 알아야 함
    for (int i = 0; i < students.size(); i++) {
        if(students.get(i).getTestId() == pStudent.getTestId()){
            students.remove(i);
        }
    }
}

 

printSpecificStudents → students 에 저장된 목록을 정렬하여 출력

private void printSpecificStudents(int[] arr) {
    // 정렬
    Collections.sort(students, new Comparator<Student>() {
        @Override
        public int compare(Student o1, Student o2) {
            return o1.getTestId() - o2.getTestId();
        }
    });
    // 출력
    for (int i = 0; i < arr.length; i++) {
        Student student = students.get(arr[i] - 1);
        System.out.printf("%s %s %s\\n", student.getCode(), student.getTestId(), student.getName());
    }
}

 

process → 입력받은 학생 정보를 split 하여 makeAStudent 인자로 넣어주고 getCode()를 호출하여
I면 add 메소드, D면 delete 메소드 호출

public void process(String line) {
    String[] splitted = line.split(" ");
    Student student = makeAStudent(splitted[0], Integer.parseInt(splitted[1]), splitted[2]);
    switch (student.getCode()) {
        case "I" -> addASudent(student);
        case "D" -> deleteStudent(student);
    }
}

 

 

전체 코드

CodeUp3108.java

package com.example.javaproject3.codeup;

import java.util.*;

class Student {
    private String code;
    private int testId;
    private String name;

    public Student(String code, int testId, String name) {
        this.code = code;
        this.testId = testId;
        this.name = name;
    }

    public String getCode() {
        return code;
    }

    public int getTestId() {
        return testId;
    }

    public String getName() {
        return name;
    }
}

public class CodeUp3108 {
    private List<Student> students = new ArrayList<>();

    public Student makeAStudent(String code, int testId, String name) {
        return new Student(code, testId, name);
    }

    private boolean isExist(Student pStudent) {
        // 중복 여부 check
        for (Student student : students){
            if(pStudent.getTestId() == student.getTestId()){
                return true;
            }
        }
        return false;
    }
    private void addASudent(Student student) {
        if (!isExist(student)) {
            students.add(student);
        }
    }
    private void deleteStudent(Student pStudent) {
        // pStudent가 students에 몇번째에 있는지 알아야 함
        for (int i = 0; i < students.size(); i++) {
            if(students.get(i).getTestId() == pStudent.getTestId()){
                students.remove(i);
            }
        }
    }
    public void process(String line) {
        String[] splitted = line.split(" ");
        Student student = makeAStudent(splitted[0], Integer.parseInt(splitted[1]), splitted[2]);
        switch (student.getCode()) {
            case "I": addASudent(student); break;
            case "D": deleteStudent(student); break;
        }
    }
    private void printSpecificStudents(int[] arr) {
        // 정렬
        Collections.sort(students, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o1.getTestId() - o2.getTestId();
            }
        });
        // 출력
        for (int i = 0; i < arr.length; i++) {
            Student student = students.get(arr[i] - 1);
            System.out.printf("%s %s\\n", student.getTestId(), student.getName());
        }
    }

    public static void main(String[] args) {
        CodeUp3108 codeup3108 = new CodeUp3108();

        Scanner sc = new Scanner(System.in);
        int size = sc.nextInt();
        sc.nextLine();
        for(int i=0; i<size; i++){
            codeup3108.process(sc.nextLine());
        }

        String[] str = sc.nextLine().split(" ");
        int[] arr = new int[str.length];
        for(int i=0;i <arr.length;i++){
            arr[i] = Integer.parseInt(str[i]);
        }
        codeup3108.printSpecificStudents(arr);
    }
}
728x90