본문 바로가기

Java/백준

[JAVA] 백준 14425 문자열 집합

14425번: 문자열 집합 (acmicpc.net)

 

14425번: 문자열 집합

첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다.  다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어

www.acmicpc.net

 

 

풀이 과정 

 

- n개를 HashSet에 넣고 , m개를 입력받으면서 HashSet에 존재하는지 확인 

HashSet

 

[Java] 자바 HashSet 사용법 & 예제 총정리 (tistory.com)

 

[Java] 자바 HashSet 사용법 & 예제 총정리

HashSet이란? HashSet은 Set 인터페이스의 구현 클래스입니다. 그렇기에 Set의 성질을 그대로 상속받습니다. Set은 객체를 중복해서 저장할 수 없고 하나의 null 값만 저장할 수 있습니다. 또한 저장 순

coding-factory.tistory.com

 

- HashSet은 Set 인터페이스의 구현 클래스 

- Set의 성질을 그대로 상속 받음 

- Set은 객체를 중복해서 저장할 수 없고 하나의 null값만 저장 가능 

- 저장 순서가 유지되지 않음 

- 값을 추가하거나 삭제할 때에는 내가 추가 혹은 삭제하고자 하는 값이 Set 내부에 있는지 검색한 뒤 추가나 삭제를 해야 하므로 속도가 List 구조에 비해 느림 

 

HashSet<Integer>set = new HashSet<Integer>(); //Hashset 생성 
HashSet<Integer>set2 = new HashSet<Integer>(10); //초기 용량 지정
HashSet<Integer>set3 = new HashSet<Integer>(Arrays.asList(1,2,3)); //초기값 지정 

set.add(1); //값 추가 
set.add(2);
set.add(3);

set.remove(1); //값 제거 
set.clear(); //모든 값 제거 
set.size(); //set 크기 반환 

Iterator iter = set3.iterator(); //Iterator 사용  전체 값 출력
while(iter.hasNext()) {
	//값이 있으면 true 없으면 false
    System.out.println(iter.next());
}

set3.contains(1); //set3 내부에 값 1이 있는지 check

 

- HashSet의 add(value) 메소드를 사용하여 값을 추가 

- HashSet 내부에 존재하지 않는다면 그 값을 HashSet에 추가하고 true를 반환하고 내부에 값이 존재한다면 false를 반환 

 

- HashSet의 remove(value) 메소드를 사용하여 값을 제거 

- value의 값이 HashSet 내부에 존재한다면 그 값을 삭제한 후 true를 반환하고 없으면 false를 반환 

 

 

정답

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
import java.util.HashSet;

public class Main {
    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        HashSet<String> set = new HashSet<String>();
        
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int count = 0; //포함된 개수 
        
        for(int i=0; i<n; i++)
        {
            set.add(br.readLine());
        }
        
        int m = Integer.parseInt(st.nextToken());
        
        for(int i=0; i<m; i++)
        {
            if(set.contains(br.readLine()))
            {
                count++;
            }
        }
        
        bw.write(count+"");
        
        bw.flush();
        bw.close();
    }
}