문제

접근법
key 와 value 로
학생
, 인기도 숫자
를 저장한다.이때 이름은 사전순, 인기도는 내림차순으로 정렬해야 하기 때문에
EntrySet()
을 사용하여 Map
을 List
로 변환시켜준다.(Java 에서
Collections.sort()
를 사용하여 정렬을 하려면 일반적으로 List 형태로 정렬할 데이터를 가지고 있어야 하기 때문)Collections.sort()
는List
혹은 배열 등의 자료구조를 정렬할 때 사용하는데, 이 때 정렬 기준을 제공하기 위해 인터페이스를 구현한 객체를 인자로 전달할 수 있다.코드의
compare
메서드는 두 개의 객체를 비교하여 정렬하는 클래스. 자세히정리
Map
은 정렬을 위한Comparator
직접적으로 사용이 불가능 하다.
EntrySet
을List
로 변환한다.
Collections.sort()
메서드의Comparator
인터페이스를 구현하여 오름, 내림차순으로 정렬 할 수 있다.
코드
public class Main {
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(reader.readLine());
String[] names = reader.readLine().split(" ");
HashMap<String, Integer> nameList = new HashMap<String, Integer>();
for (String name : names) {
nameList.put(name, 0);
}
for(int k = 0; k<N ; k++) {
String[] counts = reader.readLine().split(" ");
for(String key : counts) {
nameList.put(key, nameList.getOrDefault(key, 0)+1);
}
}
List<Entry<String, Integer>> list = new ArrayList<>(nameList.entrySet());
Collections.sort(list, new Comparator<Entry<String, Integer>>() {
@Override
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
if(o1.getValue().equals(o2.getValue())) {
return o1.getKey().compareTo(o2.getKey());
}
return o2.getValue().compareTo(o1.getValue());
}
});
for (Entry<String, Integer> entry : list) {
writer.write(entry.getKey() + " " + entry.getValue() + "\n");
}
writer.flush();
}catch (Exception e) {
e.printStackTrace();
}
}
}
Share article