https://www.acmicpc.net/problem/23056
풀이 방법
N개의 학급에 최대 M명까지 선착순으로 참가할 수 있는 참가자 명단을 출력하는 문제였습니다.
- 청팀 -> 백팀 순으로 출력
- 학급 오름차순
- 이름의 길이가 짧은 것부터, 사전 순으로
위에 3가지 조건을 만족시켜 참가자 명단을 출력해주면 됩니다.
저는 청팀과 백팀을 따로 저장하기 위해 odd, even 리스트를 이용하여 최대 M명까지 넣고 정렬을 한 뒤, 각각 출력해주었습니다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;
public class Main_BJ_23056_참가자명단 {
public static class info implements Comparable<info>{
int num;
String name;
public info(int num, String name) {
super();
this.num = num;
this.name = name;
}
@Override
public int compareTo(info o) {
if(this.num==o.num) {
if(this.name.length()==o.name.length()) return this.name.compareTo(o.name);
return this.name.length() - o.name.length();
}
return this.num-o.num;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
ArrayList<info> odd = new ArrayList<>(); //홀
ArrayList<info> even = new ArrayList<>(); //짝
st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int [] school = new int[N+1];
while(true) {
st = new StringTokenizer(br.readLine());
int num = Integer.parseInt(st.nextToken());
String name = st.nextToken();
if(num==0 && name.equals("0")) break;
if(num%2==0 && school[num]<M) {
even.add(new info(num, name));
school[num]++;
}
else if(num%2==1 && school[num]<M) {
odd.add(new info(num,name));
school[num]++;
}
}
Collections.sort(odd);
Collections.sort(even);
for(int i=0;i<odd.size();i++) {
sb.append(odd.get(i).num+" "+odd.get(i).name+"\n");
}
for(int i=0;i<even.size();i++) {
sb.append(even.get(i).num+" "+even.get(i).name+"\n");
}
System.out.println(sb.toString());
}
}
|
cs |
'문제 > 백준' 카테고리의 다른 글
백준 1406번 에디터 [JAVA] (0) | 2021.10.20 |
---|---|
백준 8972번 미친 아두이노 [JAVA] (0) | 2021.10.19 |
백준 8911번 거북이 [JAVA] (0) | 2021.10.13 |
백준 6137번 문자열 생성 [JAVA] (0) | 2021.09.26 |
백준 16562 친구비 [JAVA] (0) | 2021.09.21 |