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
'컴퓨터&프로그래밍 > Baekjoon' 카테고리의 다른 글
[백준/C#] 11478 - 서로 다른 부분 문자열의 개수 (0) | 2023.11.05 |
---|---|
[백준/C#] 1269 - 대칭 차집합 (0) | 2023.11.05 |
[백준/C#] 10816 - 숫자 카드 2 (0) | 2023.11.03 |
[백준/C#] 1620 - 나는야 포켓몬 마스터 이다솜 (0) | 2023.11.02 |
[백준/C#] 7785 - 회사에 있는 사람 (0) | 2023.11.01 |