Backend
home
😒

[백준] 듣보잡

생성일
2025/02/03 01:47
태그
BaekJoon
게시일
2025/02/03
최종 편집 일시
2025/02/03 02:43

문제

해결 방안 고민

듣지 못한 사람, 보지 못한 사람 첫째 줄: 듣지 못한 사람 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
복사