본문 바로가기
Algorithm/Baekjoon

Baekjoon 22233 가희와 키워드 JAVA

by Hunveloper 2022. 9. 16.
728x90

 

22233번: 가희와 키워드

1번째 글을 쓰고 난 후에, 메모장에 있는 키워드는 set, floyd, os가 됩니다. 2번째 글을 쓰고 난 후에, 메모장에 있는 키워드는 set, os가 됩니다. map은 1번째 글과 2번째 글에 중복으로 등장하였음을

www.acmicpc.net

문제

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

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

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

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

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

입력

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

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

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

출력

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

풀이

Set을 이용하여 사용할 키워드를 저장한다.

후에 글을 작성하면서 Set이 작성한 글의 키워드를 contains하고 있다면 그 키워드를 삭제한다.

각 글을 쓸때마다 Set에서 값을 삭제하기에 남아 있는(사용하지 않은 키워드) 개수를 출력한다.

 

br.readLine()을 이용해서 작성한 글의 키워드를 입력받을때

StringTokenizer를 이용해 ","를 argument로 주게되면 ,(comma)를 기준으로 문자열을 나눈다.

코드
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());
		StringBuilder sb = new StringBuilder();
		int n = Integer.parseInt(st.nextToken()),m=Integer.parseInt(st.nextToken());
		HashSet<String> hm = new HashSet<String>();
		// Set을 이용하여 키워드 사용 유무를 판단
		for(int i=0;i<n;i++)
			hm.add(br.readLine());
		for(int i=0;i<m;i++) {
			st = new StringTokenizer(br.readLine(),",");	// 사용한 키워드를 ,로 분리하여 사용했는지 판단
			while(st.hasMoreTokens()) {	// 모든 키워드를 사용
				String key=st.nextToken();
				if(hm.contains(key))	// 만약 사용한 키워드가 Set에 있다면 삭제
					hm.remove(key);
			}
			sb.append(hm.size()+"\n");	// 사용하지 않은 키워드의 갯수를 출력
		}
		System.out.println(sb.toString());
	}
}

 

728x90
728x90

댓글