문제를 읽어본 처음 N. M을 입력받는데 반해 N번째 까지 듣도 못한사람, N + 2번째까지 보도 못한사람을 입력받으라고해
혼란이 있었다. 하지만 이 의미는 결국 첫 번째 줄은 N, M을 입력받으므로 N번만큼 듣도 못한사람을, 이후 M번 보도 못한사람을
입력받으라는 의미였다. 왜 이렇게 쓴건지는 잘 모르겠다.
듣도 못한사람, 보도못한사람 2가지 조건을 충족해야하기에, 입력받을 때 마다 value를 + 1 하는 방법을 선택했다.
즉 듣도 보도 못한사람은 value값이 2일 것이다.
듣도 보도 못한사람이 몇 명인지도 출력해야 하므로 보도 못한사람을 입력받을 때 count에 몇명인지 저장한다.
TreeMap를 사용하여 사전순으로 정렬한다.
for-each문과 keySet를 적절히 사용하여 듣도 보도 못한 사람을 출력한다.
import java.util.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
// 듣도 못한사람
int M = Integer.parseInt(st.nextToken());
// 보도 못한사람
Map<String, Integer> map = new HashMap<>();
int count = 0;
// 듣도 보도 못한사람이 몇 명인지 저장
for (int i = 0; i < N; i++) {
String see = br.readLine();
if (map.get(see) == null) {
map.put(see, 1);
}
// 처음 입력받는 값에 value를 1로 저장한다.
}
for (int i = 0; i < M; i++) {
String hear = br.readLine();
if (map.get(hear) == null) {
map.put(hear, 1);
// 처음 입력받는 값이라면 value에 1을
} else {
map.put(hear, map.get(hear) + 1);
// 그 이상으로 입력 받는다면, value에 + 1을 한 값을 저장한다.
}
if (map.get(hear) == 2) {
count++;
// value가 2일 경우 count++를 통해 몇 명인지 센다.
}
}
System.out.println(count);
TreeMap<String, Integer> rMap = new TreeMap<>();
rMap.putAll(map);
// TreeMap를 이용해 사전순으로 정렬한다. 기본정렬은 오름차순이다.
// TreeMap인 rMap에 기존 map값을 넣음으로서 사전순으로 정렬된다.
Set<String> keySet = rMap.keySet();
// for-each문에 사용하기 위해 keySet를 저장
for (String key : keySet) {
if (rMap.get(key) == 2) {
System.out.println(key);
}
//value값이 2인 경우에만 key값을 출력
}
br.close();
}
}'java' 카테고리의 다른 글
| 백준 11478 서로 다른 부분 문자열의 개수 (1) | 2024.01.24 |
|---|---|
| 백준 1269 대칭 차집합 자바 java (1) | 2024.01.24 |
| 백준 10816 숫자카드2 자바 java (0) | 2024.01.23 |
| 백준 1620 나는야 포켓몬 마스터 이다솜 자바 java (0) | 2024.01.23 |
| 백준 7785 자바 회사에 있는 사람 java (0) | 2024.01.23 |