코딩 기록 저장소

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

백준/집합과 맵

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

KimNang 2023. 5. 24. 15:08

문제 정보

제목 : 듣보잡

번호 : 1764번

사용 언어 : Java

문제 링크

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

 

1764번: 듣보잡

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

www.acmicpc.net

 

시간 제한 메모리 제한
2 초 256 MB

 

문제

김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 알파벳 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다.

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

 

출력

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

 

입출력 예제


나의 풀이

듣도 못한 사람의 명단 N, 보도 못한 사람의 수 M에 값을 입력받아 각각 저장합니다. N+M번 반복하는 for루프를 생성하여 해당 이름이 person이름을 가진 HashMap에 key로 저장되어있으면 값을 증가시키고 없다면 추가합니다. 이때 값은 1로 저장합니다. 반복이 끝나면 person HashMap에 순서대로 접근하여 해당 키의 값이 2이면 ArrayList에 추가합니다. ArrayList의 길이를 출력하고 이것은 사전순으로 정렬하여 출력합니다.

 

코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;

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));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
		
		// 듣도 못한 사람 + 보도 못한 사람 명단 반복하며 HashMap에 저장
		Map<String,Integer> person = new HashMap<>();
		for(int i=0;i<N+M;i++) {
			String str = br.readLine();
			if(person.containsKey(str))
				person.put(str, person.get(str)+1);
			else
				person.put(str, 1);
		}
		
		// 듣보잡들 keyList에 저장
		List<String> keyList = new ArrayList<>();
		for(String i : person.keySet()) {
			if(person.get(i) == 2) {
				keyList.add(i);
			}
		}
		
		// 출력형식에 맞게 출력
		bw.write(keyList.size()+"\n");
		keyList.sort(String::compareTo);
		for(String p : keyList) {
			bw.write(p+"\n");
		}
		
		bw.flush();
		bw.close();
		br.close();
	}
}