🌞Algorithm/🔥Baekjoon

[Baekjoon] 25325_학생 인기도 측정

뿌야._. 2024. 6. 11. 11:00

Silver V

문제(출처: 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 값을 출력한다.