Algorithm/Backjoon

[ 백준 16165번 JAVA ] 걸그룹 마스터 준석이

youth787 2024. 9. 29. 22:41

https://www.acmicpc.net/problem/16165

 

 

Hashmap을 사용한 문제. 

hash 관련 메서드들을 암기하자. 

 

기본적으로 put, get, remove가 있다. 

 

// 결과 값이 boolean으로 반환된다. 
boolean hasApple = map.containsKey("apple");
boolean hasValue = map.containsValue(1);

// HashMap에 있는 모든 키들을 Set으로 반환.
Set<String> keys = map.keySet();

// HashMap의 모든 키-값 쌍을 Set<Map.Entry<K, V>>로 반환
Set<Map.Entry<String, Integer>> entries = map.entrySet();

// 주어진 키가 존재하면 해당 값을 반환하고, 존재하지 않으면 defaultValue를 반환
Integer value = map.getOrDefault("banana", 0);

 

 

list 또한 값 포함 여부를 contains를 사용해 확인할 수 있다. 

 

Solution

package SILVER;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.*;

// 내림차순(사전순)으로 정렬
// Collections.sort(member, Collections.reverseOrder());

public class bj16165 {
    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());
        int M = Integer.parseInt(st.nextToken());

        HashMap<String, List<String>> group = new HashMap<>();
        for(int i=0; i<N; i++){
            String input = br.readLine();
            int number = Integer.parseInt(br.readLine());
            List<String> member = new LinkedList<>();
            for(int j=0; j<number;j++) member.add(br.readLine());
            Collections.sort(member);
            group.put(input,member);
        }
        out : for(int i=0;i<M; i++){
            String word = br.readLine();
            int num = Integer.parseInt(br.readLine());
            if(num==1){
                for(Map.Entry<String,List<String>> entry : group.entrySet()){
                    String key = entry.getKey();
                    List<String> value = entry.getValue();

                    if(value.contains(word)){
                        System.out.println(key);
                        continue out;
                    }
                }
            }else if(num==0)
                for(String mem : group.get(word)) System.out.println(mem);
        }
    }
}
반응형