🔗 백준 16165 - 걸그룹 마스터 준석이
문제

알고리즘 분류
풀이
1. 해시맵 생성
- 팀을 key, 멤버 리스트를 value로 가지는 해시맵 하나
- key는 중복이 불가능하므로 멤버는 리스트로 저장해야함
- 멤버를 key, 팀을 value로 가지는 해시맵 하나
HashMap<String, ArrayList<String>> map_team_member = new HashMap<>();
HashMap<String, String> map_member_team = new HashMap<>();
2. 해시맵에 걸그룹(입력내용) 저장
- 반복문을 돌면서
- 멤버(key), 팀(value) 해시맵에 저장
- 멤버 리스트에 멤버를 저장
- 반복문이 끝난 후
- 팀(key), 멤버(value) 해시맵에 팀이름과 멤버 리스트를 저장
for(int i = 0; i<n; i++){
ArrayList<String> members = new ArrayList<>();
String team = br.readLine();
x = Integer.parseInt(br.readLine());
for(int j = 0; j<x; j++){
String member = br.readLine();
members.add(member);
map_member_team.put(member, team);
}
map_team_member.put(team, members);
}
3. 퀴즈의 종류에 따라 해시맵의 value값 가져오기
- 퀴즈의 종류가 0일 경우
- 팀 이름을 가지고 멤버 리스트를 가져와 정렬하고 문자열에 추가
- 이후 리스트 초기화
- 퀴즈의 종류가 1일 경우
- 간단히, 멤버 이름을 가지고 팀 이름을 가져와 문자열에 추가
for(int i = 0; i<m; i++){
String input = br.readLine();
String type = br.readLine();
if(type.equals("0")){
ArrayList<String> list = map_team_member.get(input);
Collections.sort(list);
for(int j = 0; j<list.size(); j++) {
sb.append(list.get(j)).append("\n");
}
list.clear();
}else if (type.equals("1")){
sb.append(map_member_team.get(input)).append("\n");
}
}
전체 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int x = 0;
HashMap<String, ArrayList<String>> map_team_member = new HashMap<>();
HashMap<String, String> map_member_team = new HashMap<>();
for(int i = 0; i<n; i++){
ArrayList<String> members = new ArrayList<>();
String team = br.readLine();
x = Integer.parseInt(br.readLine());
for(int j = 0; j<x; j++){
String member = br.readLine();
members.add(member);
map_member_team.put(member, team);
}
map_team_member.put(team, members);
}
for(int i = 0; i<m; i++){
String input = br.readLine();
String type = br.readLine();
if(type.equals("0")){
ArrayList<String> list = map_team_member.get(input);
Collections.sort(list);
for(int j = 0; j<list.size(); j++) {
sb.append(list.get(j)).append("\n");
}
list.clear();
}else if (type.equals("1")){
sb.append(map_member_team.get(input)).append("\n");
}
}
System.out.println(sb);
}
}