본문 바로가기
Algorythms

백준 22233번 가희와 키워드 java 풀이

by 준형코딩 2024. 1. 16.

문제

가희는 블로그를 운영하고 있습니다. 가희는 블로그에 글을 쓰기 위해, 메모장에 키워드를 적곤 합니다.

지금까지 메모장에 써진 키워드는 모두 서로 다르며, 총 N개가 존재합니다.

가희는 새로운 글을 작성할 때, 최대 10개의 키워드에 대해서 글을 작성합니다.

이 키워드들 중에 메모장에 있었던 키워드는 가희가 글을 쓴 이후, 메모장에서 지워지게 됩니다.

가희는 블로그에 글을 쓰고 나서, 메모장에 있는 키워드 개수가 몇 개인지 알고 싶습니다. 가희를 도와주세요.

입력

첫 번째 줄에 가희가 메모장에 적은 키워드 개수 N, 가희가 블로그에 쓴 글의 개수 M이 공백으로 구분해서 주어집니다.

2번째 줄부터 N+1번째 줄까지 메모장에 적은 키워드 N개가 주어집니다.

N+2번째 줄부터 N+M+1번째 줄까지, 가희가 쓴 글과 관련된 키워드가 , (쉼표)로 구분해서 주어집니다. 공백으로 구분되지 않음을 유의해 주세요.

출력

x번째 줄에는 x번째 글을 쓰고 난 후에 메모장에 남아 있는 키워드의 개수를 출력해 주세요.

제한

  • 1 ≤ N ≤ 2×105 
  • 1 ≤ M ≤ 2×105
  • 1 ≤ 글에 있는 키워드 개수 ≤ 10
  • 1 ≤ 키워드 길이 ≤ 10
  • 키워드는 소문자와 숫자로만 이루어져 있습니다.
  • 메모장에 있는 키워드 이름은 중복되지 않습니다.
  • 글에 있는 키워드 이름은 중복되지 않습니다. 그러나, 한 키워드는 여러 글에 있을 수 있습니다

예제 입력 1 복사

5 2
map
set
dijkstra
floyd
os
map,dijkstra
map,floyd

예제 출력 1 복사

3
2

1번째 글을 쓰고 난 후에, 메모장에 있는 키워드는 set, floyd, os가 됩니다.

2번째 글을 쓰고 난 후에, 메모장에 있는 키워드는 set, os가 됩니다.

map은 1번째 글과 2번째 글에 중복으로 등장하였음을 참고해 주세요.

예제 입력 2 복사

2 2
gt26cw
1211train
kiwoom,lottegiant
kbo

예제 출력 2 복사

2
2

가희는 1번째 글에서 kiwoom과 lottegiant에 대해 썼습니다. 이것은 메모장에 없는 키워드이므로, 글을 쓰고 난 후에 메모장에 있는 키워드 갯수는 2가 됩니다.

가희는 2번째 글에서 kbo에 관한 글을 썼습니다. 이것은 메모장에 없는 키워드이므로, 글을 쓰고 난 후에 메모장에 있는 키워드 갯수는 2가 됩니다.

 

 

 

HashMap을 이용해서 key를 입력하고 입력된 key면 key를 지워주고 사이즈를 출력하면 되는 간단한 자료구조 구현 문제

 

- java 풀이

import java.io.*;
import java.util.*;
import java.util.stream.Collectors;


public class Main {

    static int n;
    static int m;
    static Map<String, Integer> keywords = new HashMap<String, Integer>();
    static List<String> usedKeywords = new ArrayList<String>();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());

        for (int i = 0; i < n; i++) {
            keywords.put(br.readLine(), 1);
        }

        for (int i = 0; i < m; i++) {
            Arrays.stream(br.readLine().split(",")).forEach(keyword -> {
                if (keywords.containsKey(keyword)) {
                    keywords.remove(keyword);
                }
            });

            System.out.println(keywords.size());
        }


    }
}