본문 바로가기
personal 과제/yeji's personal

백준 1764번 듣보잡

by yejiiiii 2024. 10. 6.

문제 출처 https://www.acmicpc.net/problem/1764

 

 


문제

김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때,

듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다.

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

이름은 띄어쓰기 없이 알파벳 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다.

듣도 못한 사람의 명단에는 중복되는 이름이 없으며, 보도 못한 사람의 명단도 마찬가지이다.

출력

듣보잡의 수와 그 명단을 사전순으로 출력한다.

예제 입력 1

3 4
ohhenrie
charlie
baesangwook
obama
baesangwook
ohhenrie
clinton

예제 출력 1

2
baesangwook
ohhenrie

풀이

1. 듣도 못한 사람 n명, 보도 못한 사람 m명 입력 받기 각각 HashSet에 입력 받는다  → .add()
2. 듣도 보도 못한 사람 구하기 교집합  →  n.retainAll( m ) : n에는 m과 공통된 부분만 남기고 전부 제거한다.
3. 듣보의 명단을 사전 순으로 정렬 TreeSet에 옮긴다.
4. 듣보의 수와 그 명단을 사전순으로 출력 TreeSet의 크기 구하기 →  .size()
TreeSet 출력  → 향상된 for문

Set의 특징

  • 중복을 허용하지 않는다.
  • 순서가 없다

Set 인터페이스를 구현한 클래스들

    - HashSet - 일반적인 set

    - TreeSet - 오름차순으로 값을 정렬하여 저장

    - LinkedHashSet - 입력한 순서대로 값을 정렬하여 저장

 

코드

import java.util.*;

public class Main {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		String str = scan.nextLine();
		StringTokenizer st = new StringTokenizer(str);
		
		int n = Integer.valueOf(st.nextToken()); // 듣도 못한 사람의 수 n
		int m = Integer.valueOf(st.nextToken()); // 보도 못한 사람의 수 m
		
		// 듣도 못한 사람 입력
		Set<String> setN = new HashSet<>();
		for (int i = 0; i < n; i++) {
			setN.add(scan.nextLine());
		}
		
		// 보도 못한 사람 입력
		Set<String> setM = new HashSet<>();
		for (int i = 0; i < m; i++) {
			setM.add(scan.nextLine());
		}
		
		//------------------------------------------------------------
		// 듣도 보도 못한 사람 구하기 (교집합)
		setN.retainAll(setM); // setN에는 setM과의 교집합만 남는다.
		
		// 사전 순 정렬을 위해 TreeSet 사용
		TreeSet<String> treeSet = new TreeSet<>(setN);
		
		// 출력--------------------------------------------------------
		System.out.println(treeSet.size());
		for (String name : treeSet) {
			System.out.println(name);
		}
	}
}

 


Reference

[Java] 집합 (Set)

Java HashSet 합집합, 차집합, 교집합, 부분집합

[Java] 트리셋(TreeSet) 자료구조 정리

'personal 과제 > yeji's personal' 카테고리의 다른 글

백준 2822번 점수 계산  (2) 2024.10.13
백준 2003번 수들의 합2  (1) 2024.10.13
백준 1417번 국회의원 선거  (0) 2024.10.06
백준 10773번 제로  (0) 2024.10.02