반응형
자료구조를 이용하여 쉽게 풀수있는 문제이다.
Map자료구조를 이용하여 교집합과 합집합을 구하는 문제이다. 만일 두문자열다 가지고 있는 원소이면 교집할일땐 min값을, 합집합일땐 max값을 주어주는 방식으로 풀었다. 문제를 꼼꼼히 읽는게 중요한것 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
package programmers;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Solution_2018카카오_뉴스클러스터링 {
public static void main(String[] args) {
String str1="FRANCE"; String str2="french";
// String str1="handshake"; String str2="shake hands";
// String str1="aa1+aa2"; String str2="AAAA12";
// String str1="E=M*C^2"; String str2="e=m*c^2";
System.out.println(solution(str1, str2));
}
static int solution(String str1, String str2) {
int answer = 0;
Map<String, Integer> map1=new HashMap<>();
Map<String, Integer> map2=new HashMap<>();
str1=str1.toLowerCase();
str2=str2.toLowerCase();
int total=0;
int cross=0;
for(int i=0;i<str1.length()-1;i++) {
if(checkAlp(str1.charAt(i))&&checkAlp(str1.charAt(i+1))) {
String word=str1.substring(i,i+2);
if(map1.get(word)==null) {
map1.put(word, 1);
}else {
map1.put(word, map1.get(word)+1);
}
}
}
for(int i=0;i<str2.length()-1;i++) {
if(checkAlp(str2.charAt(i))&&checkAlp(str2.charAt(i+1))) {
String word=str2.substring(i,i+2);
if(map2.get(word)==null) {
map2.put(word, 1);
}else {
map2.put(word, map2.get(word)+1);
}
}
}
Set<String> keys1=map1.keySet();
Set<String> keys2=map2.keySet();
for(String key1 :keys1) {
if(map2.get(key1)==null) {
total+=map1.get(key1);
}else {
total+=Math.max(map1.get(key1),map2.get(key1));
cross+=Math.min(map1.get(key1),map2.get(key1));
}
}
for(String key2:keys2) {
if(map1.get(key2)==null) {
total+=map2.get(key2);
}
}
if(map1.size()==0 && map2.size()==0)
answer=65536;
else
answer=65536*cross/total;
return answer;
}
static boolean checkAlp(char ch) {
if('a'<=ch &&ch<='z')
return true;
return false;
}
}
|
반응형
'Algorithm' 카테고리의 다른 글
[SWEA] 2112. 보호 필름 (0) | 2020.05.23 |
---|---|
[BOJ] 11967. 불켜기 (0) | 2020.05.21 |
[Programmers] 프렌즈4블록 (0) | 2020.05.21 |
[Programmers] 셔틀버스 (0) | 2020.05.17 |
[BOJ] 2887. 행성 터널 (0) | 2020.05.17 |