🌞Algorithm/🔥Baekjoon

[Baekjoon] 9357_Eligibility

뿌야._. 2025. 1. 22. 15:14
문제(출처: https://www.acmicpc.net/problem/9357)

< Eligibility >

 

문제 풀이 

 

HashMap을 활용하여 각 사람이 출전한 연도를 저장한다. 출전한 횟수가 5번보다 작다면 출력한다.

* Name이 소문자, 공백으로 이루어짐을 유의한다.

 

 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.HashSet;
import java.util.StringTokenizer;

public class _9357_ { // Eligibility

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
		int t = Integer.parseInt(bf.readLine());
        
		HashMap<String, HashSet<String>> map = new HashMap<>();
		for (int i = 0; i < t; i++) {
			bw.write("Case #" + (i + 1) + ":\n");
			int n = Integer.parseInt(bf.readLine());
			for (int j = 0; j < n; j++) {
				String str = bf.readLine();
                
				String name = "";
				String year = "";
                
				for (int k = 0; k < str.length(); k++) {
					if (!Character.isDigit(str.charAt(k))) {
						name += str.charAt(k);
					} else {
						year += str.charAt(k);
					}
				}
                
				if (map.containsKey(name)) {
					map.get(name).add(year);
				} else {
					HashSet<String> set = new HashSet<>();
					set.add(year);
					map.put(name, set);
				}
                
			}
			ArrayList<String> list = new ArrayList<>();
			for (String name : map.keySet()) {
				if (map.get(name).size() < 5) {
					list.add(name);
				}
			}
			Collections.sort(list);
			for (String name : list) {
				bw.write(name + "\n");
			}
			map.clear();
		}
		bw.flush();
	}
}
변수)
t : 테스트 케이스 수
map : HashMap <이름, HashSet <연도>>
n : 입력 수
str : Name Year
name,  year : 이름, 연도
list : 5번 미만 출전한 사람들

 

테스트 케이스 수를 입력받아 테스트 케이스 수만큼 다음 과정을 반복한다.

 

1) n을 입력받는다.

2) n만큼 Name과 Year을 입력받는다.

3) Name과 Year을 구분하여 name, year에 저장한다.

4) HashMap에 key값으로 Name이 있다면 value인 HashSet에 year을 추가한다. Name이 없다면 key값과 value를 추가한다.

5) HashMap을 전체 탐색하며 value의 size가 5보다 작다면 ArrayList에 key값을 추가한다.

6) ArrayList를 오름차순으로 정렬하여 출력한다.



 

'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글

[Baekjoon] 5093_Letter Replacement  (1) 2025.01.24
[Baekjoon] 31047_Warehouse  (1) 2025.01.23
[Baekjoon] 6973_Dynamic Dictionary Coding  (0) 2025.01.21
[Baekjoon] 29934_Important Messages  (1) 2025.01.20
[Baekjoon] 9951_Word Extraction  (1) 2025.01.17