문제
해결 방안 고민
듣지 못한 사람, 보지 못한 사람
첫째 줄: 듣지 못한 사람 N, 둘째 줄: 보지 못한 사람 M
둘째 줄:
N개의 줄에 걸쳐 듣지 못한 사람의 이름
N + 2째 줄부터 보지 못한 사람의 이름이 순서대로 주어짐
이름은 띄어쓰기 없이 알파벳 소문자로 구성, 길이는 20이하
중복되는 이름은 없음
== 출력 ==
듣보잡의 수와 명단을 사전 순으로 출력
Markdown
복사
해결 방법
•
HashMap<String, Integer>을 활용하여 각 사람의 이름과 들어간 횟수를 저장하였다.
•
map의 containsKey를 활용하여 중복되는 이름인 경우 list에 담았다.
◦
list를 활용한 이유는 테스트 케이스가 언제든지 바뀔 수 있다는 점을 고려.
•
명단을 사전 순으로 출력해야 하므로 list를 정렬하였다 → Collections.sort(list)
•
BufferedWriter 를 활용하여 개행 형태로 출력하였다.
코드
package algo250203;
import java.io.*;
import java.util.*;
// 듣보잡 - 실버 4
public class Baek1764 {
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(), " ");
List<String> list = new ArrayList<>();
int N = Integer.parseInt(st.nextToken()); // 듣도 못한 사람
int M = Integer.parseInt(st.nextToken()); // 보도 못한 사람
HashMap<String, Integer> map = new HashMap<>();
// 듣도 못한 사람
for (int i = 0; i < N; i++) {
String name1 = br.readLine();
map.put(name1, map.getOrDefault(name1, 1));
}
// 보도 못한 사람
for (int i = 0; i < M; i++) {
String name2 = br.readLine();
if (map.containsKey(name2)) {
list.add(name2);
}
}
// 정렬
Collections.sort(list);
int size = list.size();
bw.write(size + "\n");
for (String value : list) {
bw.write(value + "\n");
}
bw.flush();
bw.close();
}
}
Java
복사