백남이의 모교인 백준고등학교에서 체육대회를 개최하려 한다.
체육대회는 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;
}
}