백남이의 모교인 백준고등학교에서 체육대회를 개최하려 한다.
체육대회는 1부터 까지의 학급만 참여하며, 각 학급당 최대 명까지 선착순으로 참가할 수 있다.
또한, 체육대회의 팀을 학급이 홀수일 때 청팀, 짝수일 때 백팀으로 나누기로 했다.
이에 따라 백남이는 체육대회 참가자 명단 프로그램을 제작하려 한다.
첫째 줄에 학급 수인 과 학급당 신청 가능한 인원수 이 주어진다.
둘째 줄부터 신청된 순서대로 학생의 학급과 이름이 주어진다.
학급과 이름이 동일한 학생은 존재하지 않는다.
신청할 수 있는 최대 학생 수는 500명이다.
입력의 마지막은 0 0으로 나타낸다.
첫째 줄부터 체육대회 참가자 명단 프로그램에 맞게 학생의 학급과 이름을 공백으로 구분하여 출력한다.
Participants
클래스를 만들고, 필드로 반 번호와 이름을 가짐.Comparable
인터페이스를 구현하여 compareTo
메소드로 정렬 방식을 지정Main
클래스에는 odd
, even
배열 리스트를 생성하여 학급을 관리split()
메소드를 이용해 구분하여 받았다.Collections.sort()
메소드를 통해 객체를 정렬printList()
메소드를 이용해 리스트를 출력하였다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
public class Main {
private static ArrayList<Participants> odd = new ArrayList<>(); //홀수 학급
private static ArrayList<Participants> even = new ArrayList<>(); //짝수 학급
private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException {
// System.out.println("학급 수 N과 학급당 최대 인원수 M을 입력");
String[] str = br.readLine().split(" ");
int N = Integer.parseInt(str[0]);
int M = Integer.parseInt(str[1]);
int[] school = new int[N + 1];
boolean isEOF = false;
do {
// System.out.println("학급과 이름을 입력하세요");
String[] input = br.readLine().split(" ");
int classNumber = Integer.parseInt(input[0]);
String name = input[1];
if (classNumber == 0 && name.equals("0")) {
isEOF = true;
continue; //break;
}
if (classNumber % 2 == 0 && school[classNumber] < M) {
even.add(new Participants(classNumber, name));
school[classNumber]++;
} else if (classNumber % 2 == 1 && school[classNumber] < M) {
odd.add(new Participants(classNumber, name));
school[classNumber]++;
}
} while (!isEOF);
Collections.sort(odd);
Collections.sort(even);
printList(odd);
printList(even);
}
private static void printList(ArrayList<Participants> list) {
// StringBuilder sb = new StringBuilder();
//
// for (int i = 0; i < list.size(); i++) {
// sb.append(list.get(i).classNumber + " " + list.get(i).name + "\n");
// }
//
// System.out.println(sb.toString());
for (Participants p : list) {
System.out.println(p.classNumber + " " + p.name);
}
}
}
class Participants implements Comparable<Participants> {
int classNumber;
String name;
Participants(int classNumber, String name) {
this.classNumber = classNumber;
this.name = name;
}
@Override
public int compareTo(Participants o) {
if (this.classNumber == o.classNumber) {
if (this.name.length() == o.name.length()) {
return this.name.compareTo(o.name);
}
return this.name.length() - o.name.length();
}
return this.classNumber - o.classNumber;
}
}