본문 바로가기
✔️ Algorithm/Baekjoon

[백준/Java] 1764번 : 듣보잡

by Eunse 2023. 2. 18.

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

 

1764번: 듣보잡

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다.

www.acmicpc.net

 

✔️ 풀이과정

자바에서 지원하는 HashSet을 사용하면 쉽게 풀리는 문제이다.

HashSet을 선언하여 문제 조건에 맞게 문자열 집합을 생성하고, retainAll() 함수를 사용하여 두 집합의 교집합을 구해준 다음 해당 교집합의 크기와 문자열들을 출력한다. 이때 출력되어야 할 문자열은 사전순으로 정렬되어야 하므로 Arrays.sort() 함수를 사용하여 정렬한 후 출력해주었다.

 

✔️ 코드

import java.io.*;
import java.util.*;

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

    st = new StringTokenizer(br.readLine());
    int N = Integer.parseInt(st.nextToken());
    int M = Integer.parseInt(st.nextToken());

    HashSet<String> setN = new HashSet<>();
    HashSet<String> setM = new HashSet<>();

    for(int i=0 ; i<N ; i++){
      st = new StringTokenizer(br.readLine());
      setN.add(st.nextToken());
    }
    for(int i=0 ; i<M ; i++){
      st = new StringTokenizer(br.readLine());
      setM.add(st.nextToken());
    }

    setN.retainAll(setM);
    System.out.println(setN.size());
    
    String [] arr = setN.toArray(new String[0]);
    Arrays.sort(arr);
    for(int i=0 ; i<setN.size() ; i++){
      System.out.println(arr[i]);
    }
  }
}

댓글