[Java][백준] #16165 - 걸그룹 마스터 준석이

배수연·2024년 3월 15일

algorithm

목록 보기
13/45

🔗 백준 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);
    }
}

0개의 댓글