728x90
조건
M개의 보도 못한 사람의 이름을 입력받을때, 앞의 N개의 이름과 겹치는 사람을 사전식으로 정렬해서 출력!
생각
처음에는 hashmap으로 풀어야겠다는 생각을 했다 ! 근데 몇번 나오는지가 중요한게 아니라, 이름은 중복해서 나오지 않고, 그저 N중에 한번, M중에 한번 이게 중요한 것이니까, 겹치는 것을 hashSet에서 찾아주는 것이 더 좋은 코드 같았다.
참고 : https://kingjakeu.github.io/study/2020/08/12/set-map/
자료구조 Set과 Map 비교, Graph와 Tree 차이 · Studio u by kingjakeu
© 2021. All rights reserved by kingjakeu.
kingjakeu.github.io
set은 중복허용 X + 순서 보장 X
map은 key와 value가 있는데 key는 중복 불가 value값 중복 허용! (HashMap은 순서보장 못하고 LinkedHashmap은 순서보장 함)
여기서는 value값이 필요하지가 않고 key값으로 문제를 풀 수 있으니까 set을 사용하는 것이 중요함
package 듣보잡;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
HashSet<String> hs = new HashSet<String>();
for(int i = 0; i < N; i++) {
hs.add(br.readLine());
}
ArrayList<String> arrayList = new ArrayList<>();
for (int i = 0; i < M; i++) {
String s = br.readLine();
if (hs.contains(s)) {
arrayList.add(s);
}
}
Collections.sort(arrayList);
sb.append(arrayList.size() + "\n");
for(int i = 0; i < arrayList.size(); i++) {
sb.append(arrayList.get(i));
sb.append("\n");
}
System.out.println(sb);
}
}
728x90
'CS > Algorithm' 카테고리의 다른 글
[ JAVA / 백준 : 1920 ] 수 찾기 (0) | 2021.08.11 |
---|---|
[ JAVA / 백준 : 3273 ] 두 수의 합 (0) | 2021.08.09 |
[ JAVA / 백준 : 10815 ] 숫자 카드 (0) | 2021.08.09 |
[ JAVA / 백준 : 1427 ] 소트인사이드 (0) | 2021.08.08 |
[ JAVA / 백준 : 10814 ] 나이순 정렬 (0) | 2021.08.08 |