반응형
https://www.acmicpc.net/problem/16165
- 문제
- 문제 풀이
백준 16165번 걸그룹 마스터 준석이는 실버 3 난이도의 자료 구조 및 해시 문제이다. 이 문제에서는 걸그룹의 수 N개와 퀴즈 M개가 주어진다. 이때 퀴즈의 종류가 1이면 멤버의 이름이 주어지고 이 멤버가 속한 걸그룹의 이름을 출력하면 된다. 퀴즈의 종류가 0이면 팀의 이름이 주어지고 이 팀에 속해있는 멤버들의 이름들을 출력하면 된다.
이 문제는 해시맵을 이용해서 풀 수 있다. 해시맵의 키는 그룹의 이름, 즉 String을 저장할 것이고 그리고 해시맵의 값으로는 그룹의 속해 있는 멤버들의 이름, 즉 리스트를 저장할 것이다.
우선, 팀의 이름과 이 팀에 속해 있는 멤버들을 입력받고 이 값들을 해시맵에 저장해 준다.
퀴즈의 종류는 두 가지가 있다. 퀴즈의 종류가 1이면, 멤버의 이름이 주어진다. 이때는 map.keySet()을 하면 해시맵의 키들을 받을 수 있다. 이 키는 그룹의 이름이고 만약 map.get(group).contains(member)를 했을 때 true이면 이 그룹에 멤버가 있다는 뜻이므로 이 그룹의 이름을 출력하면 된다.
또 다른 퀴즈의 종류는 0일 때다. 퀴즈의 종류가 0이면, 그룹 이름이 주어진다. 이 때는 map.get(name)을 하면 List <String>을 받는다. 이때, 이 리스트를 사전순으로 정렬을 해주고 이 리스트에 있는 멤버 이름들을 출력해 주면 된다.
자세한 코드는 아래에 있는 코드를 참고하면 되겠다.
- 코드
import java.io.*;
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());
int n = Integer.parseInt(st.nextToken()); // 걸그룹의 수 N
int m = Integer.parseInt(st.nextToken()); // 퀴즈의 수 M
Map<String, List<String>> map = new HashMap<>(); // 걸그룹 정보를 저장할 Map
// 각 걸그룹 정보를 입력받고 map에 저장
for (int i = 0; i < n; i++) {
String group = br.readLine(); // 팀의 이름
int num = Integer.parseInt(br.readLine()); // 걸그룹의 인원 수
List<String> list = new ArrayList<>(); // 멤버의 이름을 저장할 List
for (int j = 0; j < num; j++) {
list.add(br.readLine()); // 멤버의 이름을 List에 추가
}
map.put(group, list); // 팀의 이름과 멤버 목록을 map에 저장
}
StringBuilder sb = new StringBuilder(); // 출력 결과를 저장할 StringBuilder
// M개의 퀴즈에 대한 답을 처리
for (int i = 0; i < m; i++) {
String name = br.readLine(); // 퀴즈에 해당하는 팀의 이름 또는 멤버의 이름
int member = Integer.parseInt(br.readLine()); // 퀴즈의 종류 (0 또는 1)
if (member == 1) { // 퀴즈의 종류가 1일 경우 (멤버 이름으로 팀 찾기)
for (String group : map.keySet()) { // 모든 팀을 순회하며
if (map.get(group).contains(name)) { // 해당 멤버가 포함되어 있는 팀을 찾음
sb.append(group + "\n"); // 해당 팀의 이름을 출력 결과에 추가
break;
}
}
} else { // 퀴즈의 종류가 0일 경우 (팀 이름으로 멤버 찾기)
List<String> list = map.get(name); // 해당 팀의 멤버 목록을 가져옴
Collections.sort(list); // 멤버 이름을 사전순으로 정렬
for (String memberName : list) { // 모든 멤버를 순회하며
sb.append(memberName + "\n"); // 멤버의 이름을 출력 결과에 추가
}
}
}
System.out.println(sb); // 출력 결과 출력
}
}
반응형
'백준' 카테고리의 다른 글
[백준] 18115번 : 카드 놓기 – JAVA [자바] (0) | 2023.08.01 |
---|---|
[백준] 19583번 : 싸이버개강총회 – JAVA [자바] (0) | 2023.08.01 |
[백준] 13414번 : 수강신청 – JAVA [자바] (0) | 2023.07.30 |
[백준] 9933번 : 민균이의 비밀번호 – JAVA [자바] (0) | 2023.07.27 |
[백준] 1822번 : 차집합 – JAVA [자바] (0) | 2023.07.26 |
댓글