문제 내용을 간단하게 요약하자면 입력으로 받는 처음 두 줄은 이후에 받게 될 좋아하는 학생 수와, 사용된 전체 학생 리스트를 의미하고 그 아래의 입력들은 좋아하는 학생들인데 bbb ddd 이렇게 있으면 bbb가 ddd를 좋아하는 건가.. 이런 식으로 해석하면서 시간을 허비할 수 있는데 그냥 입력된 모든 학생들을 다 카운트해주면 되니, 정말 간단하게 생각하면 된다
마지막으로 계산이 끝나고 나면 인기도가 높은 순, 학생 이름 순으로 정렬하고 출력해주면 되는데
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int count = Integer.parseInt(br.readLine());
String[] split = br.readLine().split(" ");
HashMap<String, Integer> map = new HashMap<>();
for (String s : split) {
map.put(s, 0);
}
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < count; i++) {
list.add(br.readLine());
}
for (String s : list) {
String[] popArr = s.split(" ");
for (String value : popArr) {
map.put(value, map.get(value) + 1);
}
}
List<Entry<String, Integer>> list2 = new ArrayList<>(map.entrySet());
list2.sort((entry1, entry2) -> {
int valueCompare = entry2.getValue().compareTo(entry1.getValue());
if (valueCompare == 0) {
return entry1.getKey().compareTo(entry2.getKey());
}
return valueCompare;
});
for (Map.Entry<String, Integer> entry : list2) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
}
문제를 풀어보면 Map에 입력된 학생들을 더해주며 모두 넣어준 뒤 인기도와 이름 순으로 정렬시킨 뒤 출력해주면 끝이 난다
Leave a Reply