• Baekjoon 16165 걸그룹 마스터 준석이 JAVA

    2022. 7. 22.

    by. 순일

     

    16165번: 걸그룹 마스터 준석이

    정우는 소문난 걸그룹 덕후이다. 정우의 친구 준석이도 걸그룹을 좋아하지만 이름을 잘 외우지 못한다는 문제가 있었다. 정우는 친구를 위해 걸그룹 개인과 팀의 이름을 검색하여 외우게 하는

    www.acmicpc.net

    문제

    정우는 소문난 걸그룹 덕후이다. 정우의 친구 준석이도 걸그룹을 좋아하지만 이름을 잘 외우지 못한다는 문제가 있었다. 정우는 친구를 위해 걸그룹 개인과 팀의 이름을 검색하여 외우게 하는 퀴즈 프로그램을 만들고자 한다.

     

    조건

    [입력]

    첫 번째 줄에는 총 입력받을 걸그룹의 수 N(0 < N < 100)과 맞혀야 할 문제의 수 M(0 < M < 100)을 입력받는다.

    두 번째 줄부터는 각 걸그룹마다 팀의 이름, 걸그룹의 인원수, 멤버의 이름을 한 줄씩 차례대로 입력받는다. 팀과 멤버의 이름은 최대 100글자이며, 모든 글자는 알파벳 소문자이다. 하나의 걸그룹이나 서로 다른 두 걸그룹에 이름이 같은 두 멤버가 있는 경우는 없다.

    그다음 줄부터는 M개의 퀴즈를 입력받는다. 각각의 퀴즈는 두 줄로 이루어져 있으며, 팀의 이름이나 멤버의 이름이 첫 줄에 주어지고 퀴즈의 종류를 나타내는 0 또는 1이 두 번째 줄에 주어진다. 퀴즈의 종류가 0일 경우 팀의 이름이 주어지며, 1일 경우 멤버의 이름이 주어진다.

     

    [출력]

    첫 번째 줄부터 차례대로 퀴즈에 대한 답을 출력한다. 퀴즈의 종류가 0일 경우 해당 팀에 속한 멤버의 이름을 사전 순으로 한 줄에 한 명씩 출력한다. 퀴즈의 종류가 1일 경우 해당 멤버가 속한 팀의 이름을 출력한다.

     

    풀이

    해당 문제는 걸그룹별로 속한 인원의 이름이 주어진 뒤 최종적으로 그룹명이나 이름이 주어졌을 때 맞춰서 출력을 해주는 문제다.

    Map와 List를 이용하여 해결하였으며 아래와 같은 방식으로 로직을 구현하였다.

     

    1. Map에 입력을 받는다. (이름을 키로 하고 그룹명을 벨류로 한다)

    2. 이름 또는 그룹명과 숫자를 입력받는다.

        1. 숫자가 0이면 그룹에 속한 이름을 사전 순으로 출력한다.

            1. map를 체크하면서 해당 그룹이 벨류인 값의 키값을 리스트에 저장한다.

            2. 리스트를 정렬한다.

            3. 리스트를 출력한다.

        2. 숫자가 1이면 해당 이름에 대한 그룹을 출력한다.

            1. map에 키값으로 이름을 넣어 그룹을 출력한다.

     

    코드
    import java.io.*;
    import java.util.*;
    
    public class Main {
        public static void main(String[] args) throws Exception{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st = new StringTokenizer(br.readLine());
    
            int N = Integer.parseInt(st.nextToken());
            int M = Integer.parseInt(st.nextToken());
    
            Map<String,String> map = new HashMap<>();
            for(int i = 0 ; i < N ; i ++){
                String group = br.readLine();
                int n = Integer.parseInt(br.readLine());
                for(int j = 0; j < n ; j ++){
                    map.put(br.readLine(),group); // 이름을 키값으로 하고 벨류에 그룹명 저장
                }
            }
    
            for(int i = 0 ; i < M ; i++){
                String name = br.readLine();
                int n = Integer.parseInt(br.readLine());
                if(n == 0){ // 이름 출력
                    List<String> list = new ArrayList<>(); //정렬을 위해 사용
                    for (Map.Entry<String,String> m: map.entrySet()) { // 벨류값을 통해 키값 가져오기
                        if(m.getValue().equals(name))
                            list.add(m.getKey());
                    }
                    list.sort((a,b) -> a.compareTo(b)); //람다식으로 정렬
                    for (String s: list) {
                        System.out.println(s); // 이름 출력
                    }
                }else { // 그룹명 출력 
                    System.out.println(map.get(name));
                }
            }
        }
    }

     

     

    GitHub - JUNGSOONIL/Algorithm-JAVA: 알고리즘 문제 해결 자바 소스 코드

    알고리즘 문제 해결 자바 소스 코드. Contribute to JUNGSOONIL/Algorithm-JAVA development by creating an account on GitHub.

    github.com

     

    728x90

    댓글