728x90
반응형
이 문제는 듣도 못한 사람, 보도 못한 사람의 명단을 따로 입력 받고
두 명단에서 겹치는 사람 인원과 이름을 출력하는 문제입니다.
1. 두 명단을 입력을 받아 배열에 저장합니다.
2. HashSet을 이용하여 교집합을 찾습니다.
3. 이를 정렬하여 출력합니다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // 스캐너 객체 생성
int n, k;
n = sc.nextInt(); // 듣도 못한 사람의 수 입력 받음
k = sc.nextInt(); // 보도 못한 사람의 수 입력 받음
sc.nextLine(); // 개행문자 제거
String[] never_listen = new String[n]; // 듣도 못한 사람들의 이름을 저장할 배열 선언
String[] never_seen = new String[k]; // 보도 못한 사람들의 이름을 저장할 배열 선언
for (int i = 0; i < n; i++) {
never_listen[i] = sc.nextLine(); // 듣도 못한 사람들의 이름 입력 받음
}
for (int i = 0; i < k; i++) {
never_seen[i] = sc.nextLine(); // 보도 못한 사람들의 이름 입력 받음
}
/* HashSet은 중복된 값을 허용하지 않는 자료구조입니다.
이를 이용해 각각 듣지도, 보지도 못한 사람들의 집합을 생성합니다. */
Set<String> neverListenSet = new HashSet<>(Arrays.asList(never_listen));
Set<String> neverSeenSet= new HashSet<>(Arrays.asList(never_seen));
/* retainAll 메소드는 교집합을 구하는 메소드로, 호출하는 셋에 대해 인자로 주어진 셋과 공통된 요소만 남기고 나머지는 제거합니다.
즉, 아래 코드는 듣지도 보지도 못한사람들 집합이 됩니다.*/
neverListenSet.retainAll(neverSeenSet);
List<String> sortedList= new ArrayList<>(neverListenSet); /* List로 변환 후 */
Collections.sort(sortedList); /* 정렬 */
System.out.println(sortedList.size()); /* 듣보잡인 사람들의 수 출력 */
for(String name : sortedList){
System.out.println(name); /* 알파벳 순으로 정렬된 '듣보잡' 리스트를 출력 */
}
sc.close();
}
}
728x90
반응형
'프로그래밍_백준 > Java' 카테고리의 다른 글
Java) 백준 1874 스택 수열 (0) | 2024.01.05 |
---|---|
*Java) 백준 1966번 프린터 큐 (1) | 2024.01.03 |
Java) 10814 나이순 정렬 (2차원 배열 정렬) (0) | 2023.09.16 |
Java) 7568번 덩치 (0) | 2023.09.16 |
Java) 18110번 SOLVED.AC (절사평균) (0) | 2023.09.01 |