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);
}
}