본문 바로가기

컴퓨터&프로그래밍/Baekjoon

[백준/C#] 1764 - 듣보잡

1. 문제

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

 

- 입력

첫 줄에 N과 M

이후 N개의 줄에 들어본 적 없는 사람

그 다음부터 M개 줄에 본 적 없는 사람이 주어진다.

 

이름은 띄어쓰기 없이 길이 20 이하의 알파벳 소문자

1 <= N, M <= 500,000

 

중복 없음

 

- 출력

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

 

- 설명

예제 입력 예제 출력
3 4
ohhenrie
charlie
baesangwook
obama
baesangwook
ohhenrie
clinton
2
baesangwook
ohhenrie
 

1764번: 듣보잡

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

www.acmicpc.net


2. 풀이

듣보잡 = 들어본 적 없는 사람, 본 적 없는 사람의 교집합이므로 각각 배열에 저장하고 Intersect 메서드를 활용해 교집합을 구해서 출력했다.

// 듣보잡
// 입력
using (StreamReader sr = new StreamReader(Console.OpenStandardInput())) {
    int[] nm = Array.ConvertAll(sr.ReadLine().Split(), int.Parse);
    string[] n = new string[nm[0]];
    string[] m = new string[nm[1]]; 

    for (int i = 0; i < nm[0]; i++) 
        n[i] = sr.ReadLine();
    for (int i = 0; i < nm[1]; i++)
        m[i] = sr.ReadLine();

    // 교집합 구하기
    string[] intersect = n.Intersect(m).OrderBy(x=>x).ToArray();
    // 출력
    using (StreamWriter sw = new StreamWriter(Console.OpenStandardOutput())) {
        sw.WriteLine(intersect.Length);
        foreach (string name in intersect)
            sw.WriteLine(name);
    }
}

 


3. 배운 점

- Linq Intersect 교집합

교집합을 구하는 함수. 

예시 - string[] IntersectArr = Arr1.IntersectS(Arr2).ToArray();

 

Enumerable.Intersect 메서드 (System.Linq)

두 시퀀스의 교집합을 구합니다.

learn.microsoft.com

 

 



Calendar
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Visits
Today
Yesterday