문제(출처: https://www.acmicpc.net/problem/25325)
< 학생 인기도 측정 >
문제 풀이
HashMap을 활용하여 해당 학생을 좋아하는 학생 수를 구한다. ArrayList에 학생 이름과 인기도를 저장한다. 인기도 기준으로 내림차순, 인기도가 같다면 학생 이름 기준으로 오름차순 정렬 후 출력한다.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.StringTokenizer;
public class _25325_ { // 학생 인기도 측정
static class Student implements Comparable<Student> {
private String name;
private int score;
public Student(String name, int score) {
this.name=name;
this.score=score;
}
@Override
public int compareTo(Student o) {
if (o.score == this.score) {
return this.name.compareTo(o.name);
}
return o.score - this.score;
}
}
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int n = Integer.parseInt(bf.readLine());
HashMap<String, Integer> map = new HashMap<>();
st = new StringTokenizer(bf.readLine());
for (int i = 0; i < n; i++) {
map.put(st.nextToken(), 0);
}
for (int i = 0; i < n; i++) {
st = new StringTokenizer(bf.readLine());
while (st.hasMoreTokens()) {
String name = st.nextToken();
map.replace(name, map.get(name) + 1);
}
}
ArrayList<Student> list = new ArrayList<>();
for (String name : map.keySet()) {
list.add(new Student(name, map.get(name)));
}
Collections.sort(list);
for(int i=0; i<n; i++) {
bw.write(list.get(i).name+" "+list.get(i).score+"\n");
}
bw.flush();
}
}
변수)
n : 학생 수
map : HashMap <학생 이름, 인기도>
list : ArrayList <학생>
학생 수를 입력받는다. 학생 수만큼 이름을 입력받아 HashMap에 이름과 0을 각각 key, value로 저장한다. 학생 수만큼 학생의 정보를 입력받아 value를 증가시킨다.
HashMap 값을 ArrayList에 이름과 인기도를 변수로 가지는 Student로 저장한다. 인기도 기준으로 내림차순, 인기도가 같다면 이름 기준으로 오름차순으로 정렬 후 ArrayList 값을 출력한다.
'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글
[Baekjoon] 29891_체크포인트 달리기 (0) | 2024.06.13 |
---|---|
[Baekjoon] 23246_Sport Climbing Combined (0) | 2024.06.12 |
[Baekjoon] 15702_중간고사 채점 (0) | 2024.06.10 |
[Baekjoon] 11971_속도 위반 (0) | 2024.06.07 |
[Baekjoon] 1384_메시지 (0) | 2024.06.06 |